簡體   English   中英

如何清除Windows安裝項目中的“啟動時運行”注冊表項?

[英]How can I clean up a 'Run on Startup' registry key in a Windows setup project?

我已經編寫了帶有隨附的Windows安裝項目的WPF應用程序。 該應用程序具有“在啟動時運行”選項,這時將一個密鑰添加到SOFTWARE \\ Microsoft \\ Windows \\ CurrentVersion \\ Run注冊表中。 默認情況下,安裝程序不會創建此注冊表項,因為默認情況下該選項處於禁用狀態。 但是,我想確保如果有人卸載了該應用程序,則注冊表項將被刪除。

這可能嗎? 另外,如果不刪除密鑰,該怎么辦? 我以為Windows會嘗試運行該應用程序,但是什么也不會發生,但是我還沒有測試這種情況。

編輯-根據要求,通過以下代碼設置注冊表項:

using (var key = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true))
{
  if (key != null)
  {
    key.SetValue("MyApp", "\"" + System.Reflection.Assembly.GetExecutingAssembly().Location + "\"");
  }
}

這樣做是因為默認情況下,我不希望該應用在啟動時運行; 因此,在用戶選擇使用該設置之前,不應創建注冊表項。

如果您通過安裝自定義操作創建了關鍵數據,則需要創建一個卸載自定義操作才能將其刪除。 嚴格來說,您還應該包括一個回滾自定義操作,以在安裝失敗並回滾時將其刪除。

MSI文件是系統更改的數據庫-這就是可以卸載其中任何內容的原因,但它無法跟蹤您對代碼所做的更改。

我很想在應用程序配置的某個位置(而不是安裝位置)將此選項設為一個選項,因此該應用程序可以具有“可以在登錄時啟動”的選項,以便用戶可以打開和關閉。 目前,任何想更改該設置的人都必須擺弄注冊表或重新安裝該應用程序,這取決於他們對此東西的了解程度。

使用其他安裝工具,您可以獲得更多選擇。 例如,Visual Studio不執行多項功能。 使用其他工具(例如WiX),您可以創建一個功能,用戶可以檢查是否需要啟動,並且該功能包含使用Windows Installer注冊表項而不是代碼創建注冊表項的組件。 除了沒有編碼外,該條目在卸載時會被刪除。 用戶可以隨時進入維護模式並卸載(或添加)該功能; 安裝失敗將自動清除它。 那只是提供功能的一種方式。

Visual Studio設置相對易於使用,因為它們僅公開了Windows Installer的有限功能,因此您可以得到一些簡化,但是如果您想超越VS設置所提供的功能,則可以為此付費。 但是您也會更深入地參與Windows Installer。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM