我一直在研究“现代 Windows c++ 应用程序应如何注册其文件类型”与 Windows(请参阅C++:如何为我们的应用程序正确注册和注销文件类型关联(以编程方式))。
在梳理了有关该主题的各种 MSDN 文章后,总结如下:
- 安装程序(提升)应该注册全局 ProgID HKLM\Software\Classes\my-app.my-doc[.version](例如 HKLM\Software\Classes\TextPad.text)
- 安装程序还为其文档类型(例如 .myext)配置默认关联,并将其指向上述 HKLM 中的全局 ProgID。
注意:此处应提供用户界面以允许用户接受所有默认关联,或自定义应设置的关联。 - 运行标准(未提升)的应用程序应提供一个 UI,以允许当前用户设置他们的个人关联,如安装程序中可用的那样,除了这些关联存储在 HKCU\Software\Classes 中(每个用户,而不是每个机器) .
- 然后,UN-installer 负责删除所有已注册的 ProgID(但应该不理会实际的文件关联,因为 Windows 足够聪明,可以处理指向丢失 ProgID 的关联,这是 MSDN 指定的所需行为)。
因此,该架构对我来说听起来很合理,除非我考虑 #4:为给定用户帐户运行提升的卸载程序如何删除在步骤 #3 中为其他用户创建的任何每个用户 ProgID?
据我了解,即使在提升模式下,卸载程序也无法进入另一个用户的注册表配置单元并删除项目?或者可以吗?它是否必须首先加载每个给定的用户配置单元?这里有什么规则?
感谢您提供的任何见解!
编辑:请参阅下面的解决方案(我的问题是建立在混乱中)