我一直在研究Windows「應該如何向Windows C++應用程序註冊它的文件類型」(請參閱C++: How do I correctly register and unregister file type associations for our application (programatically))。如何從Windows卸載時從其他用戶帳戶刪除ProgIDs?
並通過關於這一問題的各種MSDN文章已經梳理,似乎是如下的總結:
- 安裝程序(高架)應該註冊的全球進程id HKLM \ Software \ Classes下\我的 - app.my-doc [.version](例如HKLM \ Software \ Classes \ TextPad.text)
- 安裝程序還爲其文檔類型(例如.myext)配置默認關聯,並將其指向上述HKLM中的全局ProgID。
注意:應在此處提供用戶界面以允許用戶接受所有默認關聯,或者自定義應設置哪些關聯。 - 應用程序運行標準(未升級)應該提供一個用戶界面,允許當前用戶設置其個人關聯(如安裝程序中提供的那樣),但這些關聯存儲在HKCU \ Software \ Classes中(每個用戶,而不是每臺機器)。
- UN安裝程序然後負責刪除所有註冊的ProgID(但應該保留實際的文件關聯,因爲Windows足夠聰明,可以處理指向缺少ProgID的關聯,這是MSDN指定的期望行爲)。
因此,模式對我來說聽起來很合理,除非我考慮#4:對於給定的用戶帳戶,卸載程序如何升級以刪除步驟#3中爲其他用戶創建的每個用戶ProgID?
據我所知,即使在提升模式下,卸載程序不能進入另一個用戶的註冊表配置單元和刪除項目?或者可以嗎?它是否必須首先加載每個給定的用戶配置單元?這裏有什麼規則?
感謝您提供的任何見解!
編輯:爲解決(我的問題始建於混亂)
如果你想成爲真的* *美觀大方,深受「每用戶卸載」更換程序的可執行文件。運行時 - 例如。用戶試圖使用您現在刪除的應用程序 - 他們會清理用戶設置。 – MSalters 2010-05-18 12:58:35
你會如何做到這一點?如果在安裝過程中,我可以修改當前用戶的註冊表,並安裝卸載程序//但當時我無法爲其他用戶帳戶設置卸載程序,而不是單個卸載程序可以在最後修改其他用戶帳戶,不是嗎? – Mordachai 2010-05-18 13:23:22
@ MSalters:這會給你一個永遠不會被刪除的懸掛式卸載程序。 – Thomas 2010-05-19 08:28:15