為什麼正常卸載不會從註冊表中刪除值?

為什麼正常卸載不會從註冊表中刪除值?

擴展於如何從登錄中刪除已卸載軟體的殘留痕跡?——每次我卸載一個程序,然後透過 RegEdit 來尋找它時,它仍然存在!

為什麼大多數 Windows 應用程式如此熱衷於在註冊表中留下自己的微小痕跡?是Windows的錯還是開發者的錯?

答案1

因為這是不可能的。

註冊表有多個根節點,但只有兩個有趣的:本地機器目前用戶。通常,安裝程式會將值寫入 LocalMachine,而執行的程式只會寫入 CurrentUser(實際上,除非安裝程式與權限混淆,否則執行的程式不能寫入 LocalMachine。

雖然將剩菜保留在 LocalMachine 中是一種懶惰,正如其他答案所指出的,但不可能清理用戶部分。

如果一個程式是每台機器安裝的(大多數都是這樣)並且多個使用者使用它,那麼卸載程式應該做什麼?它可以安全地刪除目前帳戶的使用者設置,但目前帳戶可能不是您的帳戶。 (如果您從非管理員帳戶啟動卸載程序,然後輸入管理員帳戶的憑證,則會發生這種情況 - 安裝程序現在在該帳戶下執行,而不是第一個帳戶)。

其他用戶呢?它可以嘗試列舉所有用戶,但可能不會載入他們的註冊表項。 (Windows 是惰性的,只載入它需要的東西。)

但你甚至不應該嘗試那個。如果您使用漫遊設定檔(例如用於終端服務),然後在卸載時刪除所有設置,您可能真的會搞砸並刪除實際上仍在使用的內容。

終端伺服器基本上是一台 Windows 機器,多個使用者同時登入並使用應用程式。

假設您有兩台終端伺服器運行一個應用程式。您在 TS1 上卸載應用程序,現在所有用戶的所有設定都在 TS2 上消失,因為您有漫遊設定檔。哎呀。

這同樣適用於每個使用者目錄中的檔案。

在我公司程式的設定中,我刪除了每台機器的內容,但不觸及每位使用者的內容,甚至不觸及目前運行設定的使用者的內容。

答案2

造成這種情況的原因有很多,但這並不是 Microsoft 或 Windows 作業系統的錯。

以下是留下註冊表項的一些情況和原因的清單:

  • 糟糕的程式設計 - 開發人員沒有正確編寫應用程式卸載程序,並且留下了註冊表項。除此之外,卸載程式可能沒有/使用適當的權限來刪除註冊表項。也可能有多個應用程式使用這些金鑰。例如,來自同一開發人員的兩個應用程式寫入相同的金鑰。

  • 故意留下的- 正如一則評論所提到的,這些條目可能是故意留下的。有些應用程式有試用期,試用期結束後您可以選擇刪除該應用程式。如果您選擇稍後重新安裝應用程序,這些鍵會提供有關應用程式安裝時間的資訊。除此之外,有些開發人員可能會選擇保留這些金鑰,以防萬一選擇重新安裝應用程式。如果開發人員使用登錄項目來儲存您的自訂項,他們可能會將它們留在那裡,因此當您重新安裝時,所有自訂項目都會保留。在宏偉的計劃中,註冊表項只佔用幾個位元組。

你該拔掉鑰匙嗎?那要看。 Windows 登錄是個亂搞危險的地方。留下無關的密鑰不會損害系統。有些人會說清理/整理註冊表會加速你的系統,但事實並非如此。被證明是錯的反覆。

如果你真的想擺脫這些程序,有一些解除安裝程式可以刪除程式所有痕跡的工具。這些程式將監視另一個程式的安裝程式並記錄對檔案系統和註冊表執行的所有操作,然後完全刪除這些操作。這些工具的一個問題是可能的他們可以刪除您可能想要保留的東西。

答案3

要擺脫殘留的註冊表,請嘗試使用 IOBIT 卸載程式。下的註冊表項是,出現提示時點選複選標記框並刪除註冊表項。 Iobit 隨附其他程序,只需使用卸載程序即可刪除它們

相關內容