Cómo ejecutar un exe usando c prog

Soy nuevo en este foro. Necesito un progtwig en C que ejecute un archivo exe en Windows. Mientras buscaba en google encontré el siguiente código:

1. Código:

#include #include int main() { (void)system("C:\\Windows\\notepad.exe"); return 0; } 

El código anterior se comstack con éxito en Borland Turbo C. Pero no ejecuta Bloc de notas.

2 Código:

 #include #include void main() { int result ; result=system("C:\\Windows\\notepad.exe"); printf("%d",result); } 

El código anterior en ejecución da -1 como salida. ¿Por qué estoy recibiendo -1.

Mi sistema operativo Windows XP Borland Turbo C Compiler

Por favor ayuda.

Hay al menos dos cosas equivocadas aquí:

  1. estás utilizando system() ;
  2. Estás codificando un camino.

Para el primer problema, ya escribí una larga perorata hace un tiempo, puedes echarle un vistazo aquí ; En pocas palabras, para iniciar un proceso, debe ir por el camino específico de la plataforma, es decir, en Windows, CreateProcess o, si desea abrir un archivo con su aplicación asociada, ShellExecute .

Para el segundo problema, está asumiendo (1) que c:\windows existe, (2) que es el directorio de windows de la instancia de windows actualmente en ejecución (3) que notepad.exe existe realmente y (4) que es en dicho directorio.

Si bien notepad.exe está prácticamente garantizado en cada instalación de Windows, no está claro dónde debe buscarlo. Desde Windows 3.0 estaba en el directorio de Windows, pero en la familia NT solía permanecer en el subdirectorio system32 . Entonces, a partir de alguna versión de Windows, Microsoft colocó dos copias del bloc de notas, tanto en el directorio de windows como en el directorio de system32 (consulte esta publicación del blog ).

Diversión adicional: desde Windows Server 2008, se eliminó la copia del directorio de Windows ( enlace : por cierto, el título de la publicación es ¿Qué idiota codificaría la ruta al Bloc de notas?: :D ), por lo que su progtwig no podrá abrir el notepad incluso si Windows reside en c:\windows .

Pero el mayor problema aquí es que no se garantiza que Windows esté instalado en c:\windows ; en cada Windows de la familia NT antes de Windows XP, en realidad se instaló de forma predeterminada en c:\winnt , por lo que su código fallaría aquí.

Además, si tiene más de una copia de Windows instalada (por ejemplo, Windows 7 64 bit en c: Windows XP 32 bit en d: c:\windows puede existir realmente, pero puede contener una copia de Windows diferente a la actualmente en ejecución, por lo que estaría abriendo el notepad de notepad desde otra copia de Windows (y si esa copia es de 64 bits y la de ejecución es de 32 bits, no se ejecutará).

También pueden ocurrir cosas similares si instala Windows en un disco que ya contiene un directorio de windows ; en ese caso, la instalación colocará a Windows en un directorio de Windows(01) (o algo así), y c:\windows puede estar vacío.

Larga historia corta:

  1. evite usar el system : aparte de sus otros defectos, en todos estos escenarios su aplicación no tendría ninguna pista de que el notepad no se haya iniciado;

  2. evitar las rutas de encoding: c:\windows no se garantiza que exista; si necesita obtener la ruta del directorio de Windows, puede expandir la variable de entorno %windir% (o %systemroot ), o usar la API GetWindowsDirectory ;

  3. si su aplicación está en PATH , puede aprovechar este hecho: el directorio de Windows y system32 están en la PATH entorno PATH , lo que significa que, si intenta iniciar el notepad , puede evitar especificar su ruta completa; por otro lado, se está exponiendo a vulnerabilidades si un usuario malintencionado coloca una aplicación peligrosa en el directorio de trabajo de su aplicación;

  4. Si desea abrir un archivo, use ShellExecute : abrirá automáticamente ese archivo con la aplicación asociada.

Mire dónde guarda su archivo de origen, siempre comstackdores de C ++ generan dos archivos, digamos que su origen se llama “hello.cpp” Estos archivos deberían estar en su ruta de origen: hello.obj hello.exe <- su programa a distribut

ADEMÁS

Creo que deberías usar un nuevo IDE / comstackdor gratuito para obtener mejores resultados, como: CodeBlocks en http://www.codeblocks.org

Por mi parte no veo ningún problema con el código, ¿intentaste ejecutar el progtwig con algún IDE estándar, como dev-cpp o bloques de código?

Y hacer una cosa

intente ejecutar el mismo comando en el símbolo del sistema primero y diga el resultado.


También me gustaría decirle que vaya al directorio de Windows y compruebe si Notepad.exe está allí o no.

No es probable pero hay una posibilidad.

Gracias

Alok Kr.

Podría ser que tu camino esté equivocado de alguna manera. Le sugeriría seguir los consejos de Kumar e intentar ejecutarlo primero en el símbolo del sistema para ver que está utilizando la ruta correcta.

Además, es posible que desee probar a ejecutar notepad.exe sin ninguna ruta. Como se encuentra en la RUTA, debería poder especificar solo “notepad.exe”.

No estoy seguro de que el bloc de notas haya sido almacenado en el directorio de Windows. Este código funciona bajo WinXP.

 #include #include /* main() returns int, not void. */ int main( void ) { int result ; result=system("C:/Windows/system32/notepad.exe"); printf("%d",result); return 0; } 

usar la función _wpopen (versión de windows de popen)
fuente: http://msdn.microsoft.com/en-us/library/96ayss4b.aspx