2012-01-02 149 views
0

我正在製作一個安裝程序,它將100%取決於系統變量,如%TEMP%或%Path%,用戶首先雙擊windows.bat文件。如何使用BATCH或VBS使永久系統變量?

但是,如何在Windows XP,Vista,7,8使用VBS或BATCH設置永久系統變量?

我嘗試了BATCH,但在Windows XP中,大多數用戶默認沒有setx,所以我想避免使用該技術。有沒有更好的方法來做到這一點?

C:\Documents and Settings\sun>REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Ses 
sion Manager\Environment" /v MyApplicationWillUsetThis /d "C:\WhatEverPathToIncl 
udeHereQuestionMark" 

The operation completed successfully 

C:\Documents and Settings\sun>REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Ses 
sion Manager\Environment" /v MyApplicationWillUsetThis /d "C:\WhatEverPathToIncl 
udeHereQuestionMark" 
Value MyApplicationWillUsetThis exists, overwrite(Y/N)? Y 

The operation completed successfully 
+0

試着讓你的安裝程序僅0%取決於系統變量。 – 2012-01-02 21:12:36

+1

@UweKeim:0%安裝程序,但應用程序是100%需要一些定製的系統變量。特別是我的第三方庫。 – YumYumYum 2012-01-02 21:14:02

回答

3

您可以創建在註冊表中HKEY_LOCAL_MACHINE \ SYSTEM的REG_SZ值\ CURRENTCONTROLSET \控制\會話管理\環境。值的名稱指定環境變量的名稱,該值指定環境變量的值。

您也可以修改現有的值。

爲了修改註冊表,您可以使用WScript.Shell對象的RegRead和RegWrite方法。舉個例子,看看Manipulating the System Registry

編輯:您可以先刪除現有的值,然後重新創建它。

REG DELETE "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v MyApplicationWillUsetThis /f 
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v MyApplicationWillUsetThis /d "C:\WhatEverPathToIncludeHereQuestionMark" 
+1

1)http://ss64.com/nt/reg.html 2)REG添加「HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment」/ v MyApplicationWillUsetThis/d「C:\ WhatEverPathToIncludeHereQuestionMark」? – YumYumYum 2012-01-02 21:20:23

+1

是的,這是另一種方式。 – 2012-01-02 21:22:21

+0

我做了上面我的編輯。但它會詢問Y或N.如何在命令中明確應用「是的,總是」? – YumYumYum 2012-01-02 21:22:58

2

如何從VBScript

Set WshShell = CreateObject("Wscript.Shell") 

' set a permanent environment variable %MyVarName% for all users 
WshShell.Environment.item("MyVarName") = "MyVarValue" 

設置環境變量如果上面的設置是不是永久性的,試試這個。這將爲所有用戶設置永久環境變量。您可以使用Environment集合嘗試System,User,Volatile和Process類別。

With WSHShell.Environment("SYSTEM") 
    .item("MyVarName") = "MyVarValue" 
End With 

您還可以使用ExpandEnvironmentStrings閱讀環境變量或與長命令行中輸入字符串值替換它們。

sValue = WshShell.ExpandEnvironmentStrings("%MyVarName%") 

與註冊表的工作嘗試

sRegKey = "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\MyVarName" 

sValue = WshShell.RegRead(sRegKey) 

' don't write if no change is required. 
If sValue <> sNewValue Then WshShell.RegWrite sRegKey , sNewValue