C++如何调用另一个cmd exe不让他继承自身环境变量
问下大家 ,我C++想调用外部EXE CMD 怎么设置让外部模式不继承我的环境变量第一个exe设置了环境变量
SetEnvironmentVariable("PATH", L"D:\\Program Files\\TEST\\");
ShellExecute
调用第二个exe不想用第一个里面所有变量,但是我在第二个里面打印这个变量,还是一样的
CreateProcess
这个也是一样的
用VBS也是一样的,
我只想在第一个EXE中,启动第二个EXE,方式就像手动打开第二个一样,2个EXE毫无关系的去启动另一个EXE
用什么代码 CreateProcess的lpEnvironment参数可以设置环境变量吧 苏紫方璇 发表于 2024-1-31 09:33
CreateProcess的lpEnvironment参数可以设置环境变量吧
设置了NULL也没有用
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));
if (CreateProcess(NULL, L"d:\\b.exe", NULL, NULL, FALSE, CREATE_UNICODE_ENVIRONMENT, NULL, NULL, &si, &pi) == TRUE) {
std::cout << "b.exe started with PID: " << pi.dwProcessId << std::endl;
// 等待子进程完成(可选)
WaitForSingleObject(pi.hProcess, INFINITE);
// 清理资源...
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
else {
std::cerr << "Failed to start b.exe" << std::endl;
return 1;
} 有个系统api,这个api可以改变环境变量,先备份,然后清空,运行之后重新备份就可以了。(SetEnvironmentVariable, setenv) tonyfeng 发表于 2024-1-31 10:58
设置了NULL也没有用
STARTUPINFO si;
PROCESS_INFORMATION pi;
msdn是这样写的
A pointer to the environment block for the new process. If this parameter is NULL, the new process uses the environment of the calling process.设置NULL会继承调用方的环境块
https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa main的第三个参数设置试试 你先在第一个程序中现复制原始的环境变量,然后再设置SetEnvironmentVariable("PATH", L"D:\\Program Files\\TEST\\");,你打开第二个程序的时候,把原来复制的环境变量传过去就好了 fuhohua 发表于 2024-1-31 13:51
你先在第一个程序中现复制原始的环境变量,然后再设置SetEnvironmentVariable("PATH", L"D:\\Program Files ...
我是不需要环境,就想让它自己模仿人工手动打开, 苏紫方璇 发表于 2024-1-31 12:17
msdn是这样写的
设置NULL会继承调用方的环境块
https://learn.microsoft.com/en-us/windows/win32/api/ ...
参数
lpEnvironment
指向新进程的环境块的指针。如果此参数为 NULL,则新进程将使用调用进程的环境。就是继承原先的环境变量
环境块由一个以 null 结尾的字符串的 null 终止块组成。
我没有新进程的环境变量指针,我只是想模仿手动打开,那怎么办呢,请教一下,有代码吗 tonyfeng 发表于 2024-1-31 13:57
我是不需要环境,就想让它自己模仿人工手动打开,
那用dos命令可能可以,你执行system("explorer 程序路径");试试
页:
[1]
2