2014-01-14 51 views
0

我需要啓動一個可執行文件,其工作目錄使用環境變量進行設置。例如,我需要做的是這樣的:將lpCurrentDirectory參數中的環境變量用於CreateProcess函數

CreateProcess(exe, args, NULL, NULL, FALSE, 0, NULL, TEXT("%CUSTOM_DIR%"), &si, &pi); 

然而,這始終返回false與ERROR_DIRECTORY(267)設置爲最後一個錯誤。我已經驗證了CUSTOM_DIR環境變量確實與代碼中設置:

auto environment = GetEnvironmentStrings(); 
auto env = environment; 
while (*env) 
{ 
    printf("%ls\n", env); 
    env += wcslen(env) + 1; 
} 
FreeEnvironmentStrings(environment); 

除了:

TCHAR szVal[1024]; 
GetEnvironmentVariable(TEXT("CUSTOM_DIR"), szVal, 1024); 
printf("%ls\n", szVal); 

尋找在MSDN位以及SO後,我一直沒能夠找到與這個問題有關的任何東西。我現在可以完成的唯一方法是解析字符串並自己進行替換(yuk!)的可怕解決方案。

+0

您確實需要閱讀問題才能回答問題。我將環境變量名稱傳遞給'lpCurrentDirectory'而不是'lpEnvironment' ...如果'CreateProcess'(或其他函數)不會替代我,那很酷,我可以自己做(不情願)。你的迴應沒有解決這個問題,雖然... – Duncan

+0

是的,我確實需要閱讀這個問題!哎呀。 –

回答

2

系統將不會在這種情況下爲您擴展環境變量。在調用CreateProcess之前,你必須自己做。

+0

令人失望。至少我找到[ExpandEnvironmentStrings](http://msdn.microsoft.com/en-us/library/windows/desktop/ms724265(v = vs.85).aspx)函數。 – Duncan