Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 在lpCurrentDirectory参数中使用环境变量创建进程函数_Windows_Winapi - Fatal编程技术网

Windows 在lpCurrentDirectory参数中使用环境变量创建进程函数

Windows 在lpCurrentDirectory参数中使用环境变量创建进程函数,windows,winapi,Windows,Winapi,我需要启动一个可执行文件,它的工作目录是使用环境变量设置的。例如,我需要执行以下操作: CreateProcess(exe, args, NULL, NULL, FALSE, 0, NULL, TEXT("%CUSTOM_DIR%"), &si, &pi); 但是,如果将ERROR\u DIRECTORY(267)设置为最后一个错误,则会始终返回false。我已经验证了CUSTOM_DIR环境变量确实是用以下代码设置的: auto environment = GetEnviro

我需要启动一个可执行文件,它的工作目录是使用环境变量设置的。例如,我需要执行以下操作:

CreateProcess(exe, args, NULL, NULL, FALSE, 0, NULL, TEXT("%CUSTOM_DIR%"), &si, &pi);
但是,如果将
ERROR\u DIRECTORY
(267)设置为最后一个错误,则会始终返回false。我已经验证了
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上搜索了一些内容之后,我也没有找到任何与这个问题相关的内容。我现在唯一能完成的方法是解析字符串并自己进行替换的糟糕解决方案(yuk!)。

在这种情况下,系统不会为您扩展环境变量。在调用CreateProcess之前,您必须自己动手。

您确实需要阅读问题才能回答问题。我正在将环境变量名传递给
lpCurrentDirectory
而不是
lpEnvironment
。。。如果
CreateProcess
(或其他函数)不替我做替换,那很酷,我可以自己做(不情愿)。你的回答没有回答这个问题,但是…是的,我确实需要阅读这个问题!!哎呀,真令人失望。至少我找到了这个函数。