2010-05-17 85 views
1

我一直在研究Windows「應該如何向Windows C++應用程序註冊它的文件類型」(請參閱​​C++: How do I correctly register and unregister file type associations for our application (programatically))。如何從Windows卸載時從其他用戶帳戶刪除ProgIDs?

並通過關於這一問題的各種MSDN文章已經梳理,似乎是如下的總結:

  1. 安裝程序(高架)應該註冊的全球進程id HKLM \ Software \ Classes下\我的 - app.my-doc [.version](例如HKLM \ Software \ Classes \ TextPad.text)
  2. 安裝程序還爲其文檔類型(例如.myext)配置默認關聯,並將其指向上述HKLM中的全局ProgID。
    注意:應在此處提供用戶界面以允許用戶接受所有默認關聯,或者自定義應設置哪些關聯。
  3. 應用程序運行標準(未升級)應該提供一個用戶界面,允許當前用戶設置其個人關聯(如安裝程序中提供的那樣),但這些關聯存儲在HKCU \ Software \ Classes中(每個用戶,而不是每臺機器)。
  4. UN安裝程序然後負責刪除所有註冊的ProgID(但應該保留實際的文件關聯,因爲Windows足夠聰明,可以處理指向缺少ProgID的關聯,這是MSDN指定的期望行爲)。

因此,模式對我來說聽起來很合理,除非我考慮#4:對於給定的用戶帳戶,卸載程序如何升級以刪除步驟#3中爲其他用戶創建的每個用戶ProgID?

據我所知,即使在提升模式下,卸載程序不能進入另一個用戶的註冊表配置單元和刪除項目?或者可以嗎?它是否必須首先加載每個給定的用戶配置單元?這裏有什麼規則?

感謝您提供的任何見解!

編輯:爲解決(我的問題始建於混亂)

回答

1

我剛剛意識到:MS希望我們做的是讓每個用戶覆蓋文件映射本身 - 即.foo - >什麼?不要創建任何應該只由安裝程序創建的progID,它們的卸載程序將刪除它們,因此沒有「懸掛ProgIDs」 - 只有映射到缺少ProgID的「懸掛文件映射」,MS明確聲明是可以的。

之前安裝: HKCR \ .TXT - > HKCR \ txtfile(全球)

後安裝: HKCR \ .TXT - > HKCR \ MyEditor.text.1(全球)

用戶決定他們想要將.txt文件映射到TextPad: HKCU \ Software \ Classes \ .txt - > HKCR \ TextPad.txt(僅此用戶,全局仍爲.txt-> MyEditor.text。1)

卸載後: HKCR \ .TXT X-> HKCR \ MyEditor.text.1(全球性的,但關鍵HKCR \ MyEditor.txt.1已被刪除)

而一個用戶誰否則它們的價值仍然可以使用,因爲無論哪種方式,無論他們的.txt點的個別副本是有效還是無效,Microsoft都會處理它。

我希望幫助別人......

1

據我所知,在其他用戶帳戶設置通常剛離開那裏見下文。這不限於文件類型關聯。

幾乎不可能刪除所有用戶帳戶中的設置,因爲有些可能是當前未連接的域中的漫遊配置文件,或者是本地管理員無法訪問的漫遊配置文件。

+0

如果你想成爲真的* *美觀大方,深受「每用戶卸載」更換程序的可執行文件。運行時 - 例如。用戶試圖使用您現在刪除的應用程序 - 他們會清理用戶設置。 – MSalters 2010-05-18 12:58:35

+0

你會如何做到這一點?如果在安裝過程中,我可以修改當前用戶的註冊表,並安裝卸載程序//但當時我無法爲其他用戶帳戶設置卸載程序,而不是單個卸載程序可以在最後修改其他用戶帳戶,不是嗎? – Mordachai 2010-05-18 13:23:22

+0

@ MSalters:這會給你一個永遠不會被刪除的懸掛式卸載程序。 – Thomas 2010-05-19 08:28:15

相關問題