2010-07-10 32 views
2

問候地球人,變量設置cmd.exe的

這裏是我的問題:

如何創建一個計劃,將變量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現在,我使用一個有點傻workaround.As設定一個變量來

HKEY_CURRENT_USER \環境

HKEY_LOCAL_MACHINE \系統\ CurrentControlSet \控制\會話管理器\環境

是比較容易我只是記錄類似的變量註冊表:

load.temp.vars=set myvar1=myval1&set myvar2=myval2& .... 

,然後就打電話%load.temp.vars%,這將作爲一個命令來執行:

c:/>%load.temp.vars% 
c:/>set myvar1 
myvar1=myval1 

它工作正常卜還不夠好,我:)

長壽和繁榮, \\ // _

+0

可能重複的[是否有可能改變在Python中的父進程的環境?](http://stackoverflow.com/questions/263005/is-it-possible-to-change-the-environment-of -a-parent-process-in-python) – 2010-07-10 10:53:11

回答

2

看看這篇文章:Three Ways to Inject Your Code into Another Process

此外,您可能還需要一個處理您的父進程(以確定其更改環境的目標進程)。一種獲得它的方式描述爲here

請記住,注入可能無法正常工作,具體取決於用戶帳戶權限,以及某些特別偏執的防病毒解決方案可能會對此產生不滿。

2

有很簡單的方法可以做到這一點沒有任何竅門

你應該寫一個小程序myexe.exe它製作一個簡單的輸出(控制檯輸出),如下列:

SET myvar=Some value 

那麼你下面的步驟啓動程序:

myexe.exe >%TEMP%\t.cmd 
call %TEMP%\t.cmd 
del %TEMP%\t.cmd 

現在在當前cmd.exe啓動的myexe.exe存在環境變量myvar,它的值爲Some value。這不正是你想要的嗎?

這種方式極其簡單,適用於所有版本的Windows(而不僅僅是Windows)。所以這是我的建議。

+0

你發佈的示例只能在Windows上運行。然而,這種方法是普遍的(如果你認爲每個人都有一些像Bash這樣的shell解釋器)。 – rubenvb 2010-07-10 13:43:56

+0

我的意思是引起方法(或方式) – Oleg 2010-07-10 13:56:24

+0

@Johannes:每個人都可以有自己的意見。如果你更喜歡用一個值來產生輸出,那麼你需要編寫更多的批處理代碼非常慢,請執行此操作。而且在實際情況下,您不需要設置一個環境變量,而是設置一組環境變量。在這種情況下,輸出幾行「SET myvar = Some value」是我所知道的最佳解決方案。我有第一次使用無證但熟知的特性在MS DOS中解決這個問題的經驗。後來我測試了不同的方式,並找到了我認爲最好的方法。如果您更喜歡另一種方式,請使用它。 – Oleg 2010-07-10 16:14:06