在lpCurrentDirectory参数中使用环境变量来创建CreateProcess函数

时间:2014-01-14 18:56:48

标签: windows winapi

我需要启动一个可执行文件,其工作目录是使用环境变量设置的。例如,我需要做类似的事情:

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!)。

1 个答案:

答案 0 :(得分:2)

系统不会在该上下文中为您扩展环境变量。在调用CreateProcess之前,您必须自己完成。