2012-05-21 12 views
5

Ho usato la funzione system() per chiamare certmgr.exe nel mio codice C. Una volta avviato il mio eseguibile, viene visualizzato un promt di comando che mostra il certificato installato correttamente.file eseguibili di default di windows nel programma C

Ma non desidero che il comando venga aperto. Come farlo??

altri modi disponibili per chiamare il "exe" in linguaggio C ..

grazie ,,,

+0

ringrazia tutti per ur risposte ... upvoted tutto ... – 2vision2

+0

ShellExecute (null, null, " . \\ certifications \\ CertMgr.exe ","/add. \\ certifications \\ MYcertificate.cer/s/r localMachine root ", NULL, SW_HIDE) Uso il comando precedente e ancora una finestra di console si apre facendo clic sul mio exe .... – 2vision2

risposta

5

Il modo più semplice per eseguire questa operazione su Windows è chiamare ShellExecute. Passa al numero SW_HIDE per assicurarti che non venga visualizzata alcuna finestra della console.

In alternativa è possibile utilizzare CreateProcess ma è un po 'più complicato da chiamare. Utilizzare il flag CREATE_NO_WINDOW per sopprimere la finestra della console.

+0

ShellExecute (NULL, NULL, ". \\ certificazioni \\ CertMgr.exe", "/ add. \\ certificazioni \\ MYcertificate.cer/s/r localMachine root", NULL, SW_HIDE) Uso il sopra comando e ancora una finestra di console si apre cliccando su my exe .... – 2vision2

+0

Che dire di CreateProcess con il flag CREATE_NO_WINDOW. A volte questa è l'unica soluzione. –

+0

ya Ho provato con createProcess anche in questo caso sto ottenendo una finestra della console .. CreateProcess (". \\ certificazioni \\ CertMgr.exe", "/ aggiungi. \\ certificazioni \\ MYcertificate.cer/s/r localMachine root", NULL , NULL, FALSE, CREATE_NO_WINDOW, NULL, NULL, e si, &pi); – 2vision2

3

Non v'è alcun modo per eseguire cmd.exe silenzio/in background. Tuttavia, cercare il comando start e il suo associato /B opzione:

Avvia una finestra separata per eseguire un programma o un comando specifico.

START ["titolo"] [/ percorso D] [/ I] [/ MIN] [/ MAX] [/ SEPARATE |/SHARED] [/ LOW |/NORMALE |/ALTO |/REALTIME |/ABOVENORMAL |/BELOWNORMAL] [/ AFFINITY] [/ WAIT] [/ B] [comando/programma] [parametri]

[...] applicativi B Avvio senza creare una nuova finestra. L'applicazione ha^Gestione C ignorata. A meno che l'applicazione abiliti l'elaborazione^C,^Break è l'unico modo per interrompere l'applicazione .

Starai meglio con CreateProcess.

2

WINAPI ha una funzione CreateProcess() che è possibile utilizzare per eseguire un altro eseguibile. Ci sono diversi argomenti per questa funzione che può fornire un meccanismo per non visualizzare la finestra della console di certmgr.exe (da process creation flags argomento):

CREATE_NO_WINDOW Il processo è un'applicazione console che viene eseguito senza una finestra di console . Pertanto, l'handle della console per l'applicazione non è impostato.

0

Risposto da T.E.D in this link mi ha aiutato finalmente ...

Questo può aiutare qualcuno in futuro ...

Altri hanno menzionato utilizzando CreateProcess (presumibilmente per reindirizzare l'output).Il motivo generale per cui ciò accade è che il programma che si sta eseguendo tramite "system" è un programma da riga di comando. Se è qualcosa da compilare, puoi sbarazzarti della finestra della console costruendola come un programma GUI. Si dovrebbe essere in grado di fare questo includendo Windows.h e l'utilizzo di WinMain() come punto di ingresso al posto di main()

+0

sto usando mingw come compilatore e shell execute apre ancora una console con main come punto di partenza. L'ho cambiato in WinMain() e compilato con l'opzione -mwindows. – 2vision2

Problemi correlati