PDA

View Full Version : [Win32] Problema con CreateProcess


tomminno
10-10-2006, 10:30
Ho scritto questo codice per lanciare un processo ed ottenerne l'handle, ma qualcosa non va, il processo viene creato solo nel momento in cui il programma che esegue questo codice termina :muro:

Ho provato anche senza il WaitForSingleObject, ma il risultato è il medesimo.



startupInfo.cb = sizeof(startupInfo);

if (!CreateProcess(CString(fileName.c_str()), 0, 0, 0, false, CREATE_NEW,0,0,&startupInfo, &processInfo))
{
throw Error(_T("Couldn't create process!"));
}
else
{
WaitForSingleObject(processInfo.hProcess, INFINITE);

GetExitCodeProcess( processInfo.hProcess, &ExitCode );
CloseHandle(processHandle);
CloseHandle(processInfo.hThread);
CloseHandle(processInfo.hProcess);
}

andbin
10-10-2006, 11:12
STARTUPINFO è una struttura di "input" per la CreateProcess. Hai inizializzato la struttura (oltre al campo cb)???
Poi metti 0 invece di CREATE_NEW! Questa costante serve quando si aprono i file con CreateFile. Il suo valore è 1, che secondo l'utilizzo che ne fa CreateProcess come "Process Creation Flags" significa DEBUG_PROCESS. ;)

tomminno
10-10-2006, 16:53
STARTUPINFO è una struttura di "input" per la CreateProcess. Hai inizializzato la struttura (oltre al campo cb)???
Poi metti 0 invece di CREATE_NEW! Questa costante serve quando si aprono i file con CreateFile. Il suo valore è 1, che secondo l'utilizzo che ne fa CreateProcess come "Process Creation Flags" significa DEBUG_PROCESS. ;)

Effettivamente non so come mi sia venuto di scrivere CREATE_NEW, comunque uso DETACHED_PROCESS e non ottengo risultati, la struttura STARTUPINFO non mi serve perchè devo lanciare un software a riga di comando e controllare periodicamente se questo è attivo o meno. Ho provato anche con CREATE_NEW_CONSOLE e CREATE_NO_WINDOW (questo è il caso che mi serve, il software deve rimanere nascosto) ma il risultato è lo stesso il processo parte quando termino il programma.
Il target è WinCE, con Win32 quel codice mi funziona (CREATE_NEW a parte).