2014-01-14 4 views
0

Мне нужно запустить исполняемый файл, рабочий каталог которого установлен с использованием переменной окружения. Например, мне нужно было сделать что-то вроде:Использование переменных окружения в аргументе lpCurrentDirectory для функции CreateProcess

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

Однако это последовательно возвращает ложь с 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

Смежные вопросы