我一直在研究“现代windows c ++应用程序应如何在Windows中注册其文件类型”(请参阅C++: How do I correctly register and unregister file type associations for our application (programatically))。
在梳理了有关该主题的各种MSDN文章后,摘要出现如下:
所以这个模式对我来说听起来很合理,除非我考虑#4:对于给定用户帐户运行升级的卸载程序如何删除在步骤#3中为其他用户创建的每个用户的ProgID?
据我所知,即使在提升模式下,卸载程序也无法进入其他用户的注册表配置单元并删除项目?或者可以吗?是否必须先加载每个给定的用户配置单元?这里的规则是什么?
感谢您提供的任何见解!
编辑:请参阅下面的解决方案(我的问题是在混乱中建立的)
答案 0 :(得分:1)
据我所知,其他用户帐户中的设置通常只是留在那里。这不仅限于文件类型关联。
从所有用户帐户中删除设置几乎是不可能的,因为有些可能是当前未连接的域上的漫游配置文件,或者本地管理员无权访问。
答案 1 :(得分:1)
我刚刚意识到:MS希望我们做的是让每个用户覆盖文件映射本身 - 即.foo - >什么?不要创建任何只能由安装程序创建的progID,这些progID由卸载程序删除,因此没有“悬挂的ProgID” - 只有“悬空文件映射”映射到缺少的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都会处理它。
我希望能帮助别人......