问候地球人,
这是我的问题:
如何创建一个程序,将变量设置为cmd.exe的当前会话,例如
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++?
但我没有从中得到一句话:
有一种方法......只需注射你的 代码进入父进程并调用 在cmd中的SetEnvironmentVariableA 过程记忆。刚注射后 释放分配的内存。
虽然C / C ++不是我的“原生”语言,但当我用“c ++注入代码”等搜索谷歌时,我觉得自己完全迷失了...是否有一篇文章,我可以获得更多关于此的信息
BTW现在我正在使用一个有点愚蠢的解决方法。作为设置变量
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
它很好用但对我来说不够好:)。
活得长久繁荣, \\ // _
答案 0 :(得分:2)
查看此文章:Three Ways to Inject Your Code into Another Process。
此外,您可能需要父进程的句柄(以确定要更改其环境的目标进程)。获得它的方法是here。
请记住,注入可能不起作用,具体取决于用户帐户权限,还有一些特别偏执的防病毒解决方案可能会对此不满意。
答案 1 :(得分:2)
有很简单的方法可以做到这一点没有任何技巧。
你应该编写一个小程序myexe.exe
,它产生一个简单的输出(控制台输出),如下所示:
SET myvar=Some value
然后按照以下步骤启动程序:
myexe.exe >%TEMP%\t.cmd
call %TEMP%\t.cmd
del %TEMP%\t.cmd
现在在启动myexe.exe的当前cmd.exe
中存在环境变量myvar
,其值为Some value
。这不完全是你想要的吗?
这种方式非常简单,适用于所有版本的Windows(而不仅仅是Windows)。所以这是我对你的推荐。