Sto tentando di utilizzare CreateProcess per avviare un nuovo blocco di ambiente ed eseguire un file batch nel nuovo blocco di ambiente. Ho letto l'esempio di msdn per CreateProcess e ho trovato il codice mostrato di seguito.Utilizzare CreateProcess per eseguire un file batch
Cosa sta succedendo, si aprirà il nuovo prompt dei comandi e si fermerà qui. Non eseguirà il mio file .bat per qualche motivo. L'uso del sistema ("percorso CALL") chiamerà il file .bat.
#include <iostream>
#define WINDOWS_LEAN_AND_MEAN
#include <Windows.h>
#include <strsafe.h>
#define BUFSIZE 4096
int main()
{
//system("CALL C:\\HFSS\\setup_vars.bat");
//return 0;
LPWCH chNewEnv;
LPTSTR lpszCurrentVariable;
DWORD dwFlags = 0;
TCHAR szAppName[] = TEXT("C:\\windows\\system32\\cmd.exe");
TCHAR cmdArgs[] = TEXT("C:\\HFSS\\setup_var.bat");
STARTUPINFO si;
PROCESS_INFORMATION pi;
BOOL fSuccess;
// Copy environment strings into an environment block.
chNewEnv = GetEnvironmentStrings();
lpszCurrentVariable = (LPTSTR)chNewEnv;
if (FAILED(StringCchCopy(lpszCurrentVariable, BUFSIZE, TEXT("MySetting=A"))))
{
printf("String copy failed\n");
return FALSE;
}
lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1;
if (FAILED(StringCchCopy(lpszCurrentVariable, BUFSIZE, TEXT("MyVersion=2"))))
{
printf("String copy failed\n");
return FALSE;
}
// Terminate the block with a NULL byte.
lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1;
*lpszCurrentVariable = (TCHAR)0;
// Create the child process, specifying a new environment block.
SecureZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
#ifdef UNICODE
dwFlags = CREATE_UNICODE_ENVIRONMENT;
#endif
fSuccess = CreateProcess(szAppName, cmdArgs, NULL, NULL, TRUE, dwFlags,
(LPVOID)chNewEnv, // new environment block
NULL, &si, &pi);
if (!fSuccess)
{
printf("CreateProcess failed (%d)\n", GetLastError());
return FALSE;
}
std::cout << "In new environment\n";
WaitForSingleObject(pi.hProcess, INFINITE);
return TRUE;
}
Su quale linea vuol innescare un punto di rottura? Le linee di cui non sei sicuro stanno cercando di aggiungere due nuove variabili ambientali al blocco di ambiente del processo che sta per essere avviato, e hai indicato che è quello che stai cercando di fare, quindi non sono sicuro di quale sia il tuo la domanda su di loro potrebbe essere. –
In realtà sto provando a impostare le variabili di ambiente nel file batch. Tuttavia, quando arrivo al file batch (senza creare il nuovo processo), la variabile% PATH% ha tutti i dati dell'albero da Visual Studio. Quindi, quando provo ad aggiungere il nuovo percorso alla variabile% PATH%, sono incluse informazioni ridondanti e in eccesso. Inoltre, ho trovato che l'arresto anomalo era dovuto all'utilizzo di "\" invece di "\\" – user2970916
La tua modifica non indirizza tutti i punti che ho generato. –