将变量设置为cmd.exe

时间:2010-07-10 10:12:16

标签: c++ windows shell variables cmd

问候地球人,

这是我的问题:

如何创建一个程序,将变量设置为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

它很好用但对我来说不够好:)。

活得长久繁荣, \\ // _

2 个答案:

答案 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)。所以这是我对你的推荐。