2009-07-01 16 views
5

Qualcuno può dirmi come creare un processo in VC++? Devo eseguireCome creare un processo in C++ su Windows?

regasm.exe testdll /tlb:test.tlb /codebase 
comando

in questo processo.

+1

Non è affatto un problema. Questa altra domanda presuppone che CreateProcess sia l'unico modo per farlo. Questo è più aperto. Per la cronaca, il dupe suggerito era http://stackoverflow.com/questions/42531/how-do-i-call-createprocess-in-c-to-launch-a-windows-executable - L'ho tolto della domanda poiché ritengo che sia una cattiva forma modificare il contenuto. Credo che dovrebbe essere messo nei commenti. Se viene chiuso come un duplicato, allora anche se stesso lo aggiungerà alla domanda. – paxdiablo

risposta

4

Se si desidera eseguire un comando sincrono (esecuzione e attesa), la soluzione migliore è utilizzare la chiamata system() (vedere here) per eseguirla. Sì, lo so che è una pagina Linux ma C è uno standard, no? :-)

Per un controllo più dettagliato di ciò che viene eseguito, come viene eseguito (sincronizzazione/asincrono) e molte altre opzioni, CreateProcess() (vedi here), e i suoi fratelli, sono probabilmente migliori, anche se sarai legato alla piattaforma Windows (che potrebbe non essere di immediata importanza per te).

3

Utilizzare CreateProcess() per generare il processo, controllare il valore di ritorno per assicurarsi che sia avviato correttamente, quindi chiudere gli handle per il processo e il thread o utilizzare WaitForSingleObject() per attendere finché non termina e quindi chiude gli handle.

10

regasm.exe (Assemblea Registrazione Tool) apporta modifiche al registro di Windows, quindi se si desidera avviare regasm.exe processo come elevata è possibile utilizzare il seguente codice:

#include "stdafx.h" 
#include "windows.h" 
#include "shellapi.h" 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
     SHELLEXECUTEINFO shExecInfo; 

     shExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); 

     shExecInfo.fMask = NULL; 
     shExecInfo.hwnd = NULL; 
     shExecInfo.lpVerb = L"runas"; 
     shExecInfo.lpFile = L"regasm.exe"; 
     shExecInfo.lpParameters = L"testdll /tlb:test.tlb /codebase"; 
     shExecInfo.lpDirectory = NULL; 
     shExecInfo.nShow = SW_NORMAL; 
     shExecInfo.hInstApp = NULL; 

     ShellExecuteEx(&shExecInfo); 

     return 0; 
} 

shExecInfo.lpVerb = L"runas" significa che processo sarà avviato con elevata privilegi. Se non vuoi che sia sufficiente impostare shExecInfo.lpVerb su NULL. Ma con Vista o Windows 7 sono richiesti i diritti di amministratore per modificare alcune parti del registro di Windows.

+0

Sta funzionando bene piuttosto che sopra.Ma intanto sta chiedendo sotto quale utente deve essere eseguito .. Puoi spiegare su questo prog SHELLEXECUTEINFO shExecInfo; shExecInfo.lpVerb = L "runas"; – Cute

+0

Ho modificato l "esegui come" su null quindi funziona senza chiedere. ok cosa significa questo L e come il processo creato con questo? – Cute

+0

L è per la stringa Unicode. –

Problemi correlati