吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 383|回复: 10
收起左侧

[求助] C++如何调用另一个cmd exe不让他继承自身环境变量

[复制链接]
tonyfeng 发表于 2024-1-31 09:17
问下大家 ,我C++想调用外部EXE CMD 怎么设置让外部模式不继承我的环境变量
第一个exe设置了环境变量
SetEnvironmentVariable("PATH", L"D:\\Program Files\\TEST\\");


ShellExecute
调用第二个exe不想用第一个里面所有变量,但是我在第二个里面打印这个变量,还是一样的
CreateProcess
这个也是一样的
用VBS也是一样的,

我只想在第一个EXE中,启动第二个EXE,方式就像手动打开第二个一样,2个EXE毫无关系的去启动另一个EXE
用什么代码

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

苏紫方璇 发表于 2024-1-31 09:33
CreateProcess的lpEnvironment参数可以设置环境变量吧
 楼主| tonyfeng 发表于 2024-1-31 10:58
苏紫方璇 发表于 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;
        }

点评

msdn是这样写的 设置NULL会继承调用方的环境块 https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa  详情 回复 发表于 2024-1-31 12:17
qqLinux 发表于 2024-1-31 11:02
有个系统api,这个api可以改变环境变量,先备份,然后清空,运行之后重新备份就可以了。(SetEnvironmentVariable, setenv)
苏紫方璇 发表于 2024-1-31 12:17
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-u ... sapi-createprocessa
无闻无问 发表于 2024-1-31 13:09
main的第三个参数设置试试
fuhohua 发表于 2024-1-31 13:51
你先在第一个程序中现复制原始的环境变量,然后再设置SetEnvironmentVariable("PATH", L"D:\\Program Files\\TEST\\");,你打开第二个程序的时候,把原来复制的环境变量传过去就好了
 楼主| tonyfeng 发表于 2024-1-31 13:57
fuhohua 发表于 2024-1-31 13:51
你先在第一个程序中现复制原始的环境变量,然后再设置SetEnvironmentVariable("PATH", L"D:\\Program Files ...

我是不需要环境,就想让它自己模仿人工手动打开,
 楼主| tonyfeng 发表于 2024-1-31 14:00
苏紫方璇 发表于 2024-1-31 12:17
msdn是这样写的
设置NULL会继承调用方的环境块
https://learn.microsoft.com/en-us/windows/win32/api/ ...

参数
[in, optional] lpEnvironment

指向新进程的环境块的指针。如果此参数为 NULL,则新进程将使用调用进程的环境。就是继承原先的环境变量

环境块由一个以 null 结尾的字符串的 null 终止块组成。

我没有新进程的环境变量指针,我只是想模仿手动打开,那怎么办呢,请教一下,有代码吗
fuhohua 发表于 2024-1-31 14:01
tonyfeng 发表于 2024-1-31 13:57
我是不需要环境,就想让它自己模仿人工手动打开,

那用dos命令可能可以,你执行system("explorer 程序路径");试试
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-11 20:43

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表