2012-05-21 12 views
5

Utilicé la función system() para llamar al certmgr.exe en mi código C. Una vez que inicio mi archivo ejecutable, aparece una instrucción de comando que muestra el certificado instalado correctamente.ejecutar ejecutables predeterminados de Windows en el programa C

Pero no quiero que se abra el comando promt. ¿¿Como hacer eso??

otras maneras disponibles para llamar a la "exe" en lenguaje C ..

gracias ,,,

+0

gracias por todas sus respuestas ... Upvoted all ... – 2vision2

+0

ShellExecute (NULL, NULL, " . \\ certifications \\ CertMgr.exe ","/add. \\ certifications \\ MYcertificate.cer/s/r localMachine root ", NULL, SW_HIDE) Uso el comando anterior y aún se abre una ventana de consola al hacer clic en mi exe .... – 2vision2

Respuesta

5

La manera más fácil de hacer esto en Windows es llamar al ShellExecute. Pase SW_HIDE para asegurarse de que no se muestre ninguna ventana de consola.

Puede utilizar alternativamente CreateProcess pero es un poco más complicado llamar. Use el indicador CREATE_NO_WINDOW para suprimir la ventana de la consola.

+0

ShellExecute (NULL, NULL, ". \\ certifications \\ CertMgr.exe", "/ add. \\ certifications \\ MYcertificate.cer/s/r localMachine root", NULL, SW_HIDE) Uso el encima del comando y aún se abre una ventana de consola al hacer clic en mi archivo exe .... – 2vision2

+0

¿Qué pasa con CreateProcess con el indicador CREATE_NO_WINDOW? A veces esa es la única solución. –

+0

y probé con createProcess también estoy obteniendo una ventana de consola .. CreateProcess (". \\ certifications \\ CertMgr.exe", "/ add. \\ certifications \\ MYcertificate.cer/s/r localMachine root", NULL , NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, & si, &pi); – 2vision2

3

No hay manera de funcionar en silencio cmd.exe/en segundo plano. Sin embargo, no mirar hacia arriba el comando start y su asociado /B opción:

Inicia una ventana para ejecutar un programa o comando especificado.

START ["title"] [/ D ruta] [/ I] [/ MIN] [/ MAX] [/ SEPARATE |/COMPARTIDO] [/ BAJO |/NORMAL |/ALTO |/REALTIME |/ABOVENORMAL |/BelowNormal] [/ AFFINITY] [/ ESPERA] [/ B] [comando/programa] [parámetros]

[...] de aplicación B de inicio sin crear una nueva ventana. La aplicación tiene^C manejo ignorado. A menos que la aplicación habilite el procesamiento^C,^La interrupción es la única forma de interrumpir la aplicación.

Estará mejor con CreateProcess.

2

WINAPI tiene una función CreateProcess() que puede usar para ejecutar otro ejecutable. Hay varios argumentos de esta función, que puede proporcionar un mecanismo para no mostrar la ventana de la consola de certmgr.exe (de process creation flags argumento):

CREATE_NO_WINDOW El proceso es una aplicación de consola que se está ejecutando sin una ventana de consola . Por lo tanto, el identificador de la consola para la aplicación no está configurado.

0

Answer T.E.D en this link me ayudó finalmente ...

Esto puede ayudar a alguien en el futuro ...

Otros han mencionado el uso de CreateProcess (presumiblemente para redirigir la salida).La razón general por la que esto sucede es que el programa que está ejecutando a través de "sistema" es un programa de línea de comandos. Si es algo que compila usted mismo, puede deshacerse de la ventana de la consola construyéndola como un programa GUI. Debería poder hacer esto al incluir Windows.h y usar WinMain() como su punto de entrada en lugar de main()

+0

estoy utilizando mingw como compilador y ejecutar shell todavía abre una consola con main como punto de partida. Lo cambié a WinMain() y compilé con -mwindows switch. – 2vision2

Cuestiones relacionadas