向地球人问好,
这是我的问题:
如何创建一个程序,将变量设置为 cmd.exe 的当前 session ,例如
c:\> set myvar
Environment variable myvar not defined
c:\>myexe.exe
c:>set myvar
myvar=myvalue
我发现的唯一类似的主题是这个 -
How can I change Windows shell (cmd.exe) environment variables from C++?
但我没有从中得到一个字:
There is a way... Just inject your code into parent process and call SetEnvironmentVariableA inside cmd's process memory. After injecting just free the allocated memory.
虽然 C/C++ 不是我的“母语”语言,但当我在 google 上搜索“c++ 注入(inject)代码”等内容时,我感觉自己完全迷失了……是否有一篇文章可以让我获得有关此内容的更多信息.
顺便说一句,现在我正在使用一种有点愚蠢的解决方法。将变量设置为
HKEY_CURRENT_USER\环境
和
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
相对容易,我只是将类似的变量记录到注册表中:
load.temp.vars=set myvar1=myval1&set myvar2=myval2& ....
然后只需调用%load.temp.vars%,它将作为命令执行:
c:/>%load.temp.vars%
c:/>set myvar1
myvar1=myval1
它工作得很好,但对我来说还不够好:)
长寿,繁荣, \\//_
最佳答案
查看这篇文章:Three Ways to Inject Your Code into Another Process .
此外,您可能需要父进程的句柄(以确定要更改其环境的目标进程)。描述了获取它的方法 here .
请记住,注入(inject)可能不起作用,具体取决于用户帐户权限,而且一些特别偏执的防病毒解决方案可能会对此不屑一顾。
关于c++ - 将变量设置为 cmd.exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3218745/