当使用代码修改环境变量后,ShellExecute 打开的程序仍然使用的是原来的环境变量。这是因为 ShellExecute 是一个新的进程,它会继承当前进程的环境变量,而不会受到代码修改的影响。那应该使用什么函数打开程序,使得被打开的程序使用新的环境变量
时间: 2024-04-15 19:31:09 浏览: 210
您可以使用 CreateProcess 函数来打开程序并使其使用新的环境变量。CreateProcess 函数允许您显式地指定要使用的环境变量。以下是一个示例代码:
```cpp
#include <windows.h>
int main()
{
// 定义并初始化变量
STARTUPINFO si = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION pi;
// 设置要启动的程序路径
LPCTSTR lpApplicationName = "C:\\Path\\to\\your\\program.exe";
// 设置环境变量(示例中只修改了 PATH 环境变量)
LPCTSTR lpEnvironment = "PATH=C:\\New\\Path\\to\\add;%PATH%";
// 创建进程
BOOL success = CreateProcess(
lpApplicationName, // 要启动的程序路径
NULL, // 命令行参数(如果有)
NULL, // 进程安全描述符
NULL, // 线程安全描述符
FALSE, // 继承标志
CREATE_UNICODE_ENVIRONMENT, // 创建进程时使用 Unicode 环境块
(LPVOID)lpEnvironment, // 指定要使用的环境变量
NULL, // 当前目录(如果为 NULL,则使用与启动进程相同的目录)
&si, // 启动信息结构体
&pi // 进程信息结构体
);
// 检查进程创建是否成功
if (success)
{
// 等待进程结束
WaitForSingleObject(pi.hProcess, INFINITE);
// 关闭进程和线程的句柄
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
else
{
// 创建进程失败,处理错误
DWORD error = GetLastError();
// ...
}
return 0;
}
```
您可以将示例代码中的 "C:\\Path\\to\\your\\program.exe" 替换为您要打开的程序的路径,并将 "C:\\New\\Path\\to\\add" 替换为您要添加的新的环境变量路径。请确保指定的路径正确无误。
阅读全文