我創造我的程序
http://support.microsoft.com/kb/307353
一個Visual Studio 2008的安裝嚮導我看到它可以添加註冊表項等。 有無需編寫自定義操作註冊Windows環境變量的可能性?
如果我必須寫一個自定義操作,那麼最簡單的方法是什麼?是否可以在安裝嚮導項目中註冊環境變量?
7
A
回答
6
使用Visual Studio 2008中,你可以很容易地在Windows註冊表中設置相應的變量做到這一點:
- 在解決方案資源管理器中,您的項目(不解決方案),單擊鼠標右鍵,並選擇查看 - >註冊表
- 創建註冊表項(文件夾):
- 對於用戶變量:在HKEY_CURRENT_USER單擊鼠標右鍵,選擇「New Key「,並將其命名爲」環境「。
- 對於系統變量:右鍵點擊HKEY_LOCAL_MACHINE,選擇 「新的密鑰」,並將其命名爲 「SYSTEM」。繼續執行此操作以創建路徑「HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment」。在環境項(文件夾)
- 單擊鼠標右鍵,選擇新建 - >字符串,並給它你想要的名稱。
- 選定的字符串,找到屬性窗口(Alt + Enter鍵會彈出)
- 在屬性窗口中,填寫價值你想要的。
如果您希望值引用安裝目錄,您可以使用屬性變量來執行此操作:[TARGETDIR] SomeFile。EXT(見http://msdn.microsoft.com/en-us/library/aa370905%28v=vs.85%29.aspx更多的屬性變量)
1
Windows安裝程序不支持通過Environment表的環境變量,但Visual Studio安裝項目不允許您使用它。
一種解決方案是使用不同的設置的創作工具,它支持的環境變量:http://en.wikipedia.org/wiki/List_of_installation_software
另一種解決方案是通過用Orca編輯MSI手動添加它在環境表中。
還有您提到的自定義操作方法。
3
頂端回答解釋如何做沒有自定義操作,但那些尋找一個自定義操作可以使用下面的代碼作爲模板:
[RunInstaller(true)]
public partial class GRInstallCustomAction : System.Configuration.Install.Installer
{
string environmentKey = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment";
string pathUrl = "C:\\Program Files (86)\\TargetFolder";
public GRInstallCustomAction()
{
InitializeComponent();
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Commit(IDictionary savedState)
{
base.Commit(savedState);
string environmentVar = Environment.GetEnvironmentVariable("PATH");
//get non-expanded PATH environment variable
string oldPath = (string)Registry.LocalMachine.CreateSubKey(environmentKey).GetValue("Path", "", RegistryValueOptions.DoNotExpandEnvironmentNames);
var index = oldPath.IndexOf(pathUrl);
if (index < 0)
{
//set the path as an an expandable string
Registry.LocalMachine.CreateSubKey(environmentKey).SetValue("Path", oldPath + ";" + pathUrl, RegistryValueKind.ExpandString);
}
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Rollback(IDictionary savedState)
{
base.Rollback(savedState);
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
//get non-expanded PATH environment variable
string oldPath = (string)Registry.LocalMachine.CreateSubKey(environmentKey).GetValue("Path", "", RegistryValueOptions.DoNotExpandEnvironmentNames);
string removeString = pathUrl + ";";
var index = oldPath.IndexOf(removeString);
if (index < 0)
{
removeString = pathUrl;
index = oldPath.IndexOf(removeString);
}
if (index > -1)
{
oldPath = oldPath.Remove(index, pathUrl.Length);
//set the path as an an expandable string
Registry.LocalMachine.CreateSubKey(environmentKey).SetValue("Path", oldPath, RegistryValueKind.ExpandString);
}
}
}
這一走通過向您展示如何創建和應用自定義操作: https://msdn.microsoft.com/en-us/library/d9k65z2d(v=vs.100).aspx
相關問題
- 1. 是否可以使用安裝項目註冊IIS Isapi映射?
- 2. 是否可以在cgo CFLAGS註釋中使用環境變量?
- 3. 安裝項目COM註冊
- 4. 是否可以一次向PyDev添加多個環境變量?
- 5. 是否可以訪問Ant項目元素中的環境變量?
- 6. 安裝項目沒有在註冊表中註冊
- 7. 在Windows安裝項目中註冊和取消註冊DLL
- 8. 帶有環境變量路徑的Visual Studio安裝項目
- 9. 是否可以在.sublime-project文件中設置環境變量?
- 10. 是否可以在postgres sql命令中引用環境變量?
- 11. 是否可以在travis中設置條件環境變量?
- 12. 是否可以在Cucumber中設置一個環境變量?
- 13. 是否可以在Makefile中「取消」環境變量?
- 14. 在asp.net中註冊/改變MIME關聯mvc Web安裝項目
- 15. 在conda環境中註冊pip安裝包
- 16. 是否可以在solrconfig.xml中使用dataDir變量的環境變量?
- 17. 向Groovy/Spring注入環境變量
- 18. 區別:環境變量和註冊表項
- 19. 信任註冊表項或環境變量
- 20. Visual Studio安裝項目(MSI)可以在HKLM下創建註冊表項嗎?
- 21. Elastic Beanstalk環境的名稱是否可用作環境變量?
- 22. 安裝期間設置環境變量
- 23. Maven的安裝 - 環境變量
- 24. 使安裝和環境變量
- 25. PropertySourcesPlaceholderConfigurer不在SpringBoot項目中註冊到環境
- 26. 在PowerShell中的遠程計算機上註冊環境變量
- 27. 無法在註冊表中創建環境變量
- 28. 安裝文件是否自動註冊?
- 29. 是否可以在Android中註冊Java安全提供程序?
- 30. 我可以在CMake GUI嚮導中添加一個「環境變量」嗎?
沒有Visual Studio 2009這樣的事情。我可以統計實例數量,一方面安裝程序實際需要註冊一個環境變量。很可能*非常好,你不是那種情況之一。 – 2011-12-19 10:53:04
@CodyGray,請解釋可能的選擇。 – 2011-12-19 11:08:19
我猜他會推薦用戶配置文件目錄/程序數據目錄中的註冊表或數據文件。或者如果你的項目是一個.Net項目,一個app.config值。雖然我不同意這個陳述的主旨 - 如果你將程序加入到PATH中,那麼這可能是一個很好的理由來解決環境變量問題。否則,我會同意可能有更好的地方放置您的數據。 – 2011-12-19 11:10:38