0
我爲模糊的標題道歉,不知道如何對我的問題進行分類。設置PATH變量不起作用
我有一個腳本,我從Visual Studio 2013項目(C++)調用。在該腳本中,我嘗試設置我的路徑變量。當PATH變量被設置時,它看起來好像是在路徑中包含了visual studio的東西,並且不止一次複製了路徑。不知道爲什麼。
注意:直接運行bat並從命令提示符運行不會出現此錯誤。
的.cpp:
int main(void)
{
system("CALL C:\\HFSS\\setup_vars.bat");
return 0;
}
蝙蝠:
:: Set PATH Variable
set path_str=%PATH%
set addPath=%ValueValue%
echo %addPath%
echo %ValueValue%
PAUSE
echo %PATH%| find /i "%addPath%">NUL
if NOT ERRORLEVEL 1 (
SETX PATH "%PATH%
) else (
SETX /M PATH "%PATH%;%addPath%;"
)
路徑,其被添加:
C:\Program Files\AnsysEM\AnsysEM15.0\Win64;
C:\Program Files\AnsysEM\AnsysEM15.0\Win64;
C:\Program Files\AnsysEM\AnsysEM15.0\Win64;
C:\Program Files\AnsysEM\AnsysEM15.0\Win64;
C:\Program Files\AnsysEM\AnsysEM15.0\Win64;
C:\Program Files (x86)\Microsoft Visual Studio 12.0\;
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\amd64
UPDATE:
我做了一些關於CreateProcess的研究,以及如何創建一個新的環境塊。
下面的代碼觸發斷點:
#include <iostream>
#include <Windows.h>
#define WINDOWS_LEAN_AND_MEAN
#include <strsafe.h>
#define BUFSIZE 4096
int main(void)
{
LPTSTR lpszCurrentVariable;
TCHAR szAppName[] = TEXT("C:\\windows\\system32\\cmd.exe");
STARTUPINFO si;
PROCESS_INFORMATION pi;
BOOL fSuccess;
LPSTR lpszVariable;
LPWCH lpvEnv;
lpvEnv = GetEnvironmentStrings();
if (lpvEnv == NULL)
{
std::cout << "GetEnvironmentStrings() Failed\n";
system("Pause");
return 0;
}
lpszCurrentVariable = lpvEnv;
if (FreeEnvironmentStrings(lpvEnv) != 0)
{
std::cout << "Freed block!\n";
}
if (FAILED(StringCchCopy(lpszCurrentVariable, BUFSIZE, L"MyNewOwnEnvSetting=ver 2.0")))
{
system("Pause");
return 1;
}
lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1;
if (FAILED(StringCchCopy(lpszCurrentVariable, BUFSIZE, L"MyNewOwnVar=MyPath")))
{
std::cout << "StringCchCopy() - String copy #2 failed\n";
system("Pause");
return 1;
}
lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1;
*lpszCurrentVariable = (WCHAR)0;
SecureZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
fSuccess = CreateProcess(szAppName, L"C:\HFSS\setup_vars.bat", NULL, NULL, TRUE, NULL, (LPVOID)lpszCurrentVariable, NULL, &si, &pi);
DWORD ret = WaitForSingleObject(pi.hProcess, INFINITE);
system("Pause");
return 0;
}
我不是整個確保以下行應該做什麼:
if (FAILED(StringCchCopy(lpszCurrentVariable, BUFSIZE, L"MyNewOwnEnvSetting=ver 2.0")))
{
system("Pause");
return 1;
}
lpszCurrentVariable += lstrlen(lpszCurrentVariable) + 1;
if (FAILED(StringCchCopy(lpszCurrentVariable, BUFSIZE, L"MyNewOwnVar=MyPath")))
{
std::cout << "StringCchCopy() - String copy #2 failed\n";
system("Pause");
return 1;
}
請爲一個新的不同的問題發佈一個新的不同的問題 – 2014-09-18 17:41:17