winapi - Windows Vista、默认程序 API、文件格式关联和(卸载)安装程序 - 爆炸性组合!

标签 winapi windows-7 windows-vista uninstallation default-programs

我的应用程序是一个表现良好的 Windows 公民,所以当我将它移植到 Windows Vista/7 时,我将自定义文件格式关联代码替换为对 Default Programs 的支持。 API。然而,当我尝试为我的应用程序制作卸载程序时遇到了一个问题 - 似乎没有办法 删除 通过默认程序 API 进行文件格式关联。

我试图调用 IApplicationAssociationRegistration::ClearUserAssociations 但它实际上删除了所有关联,包括其他应用程序的关联 - 完全恢复操作系统的默认状态(这当然是 Not Acceptable )。

我尝试调用IApplicationAssociationRegistration::SetAppAsDefault将文件格式关联返回给以前的“所有者”-但这没有帮助,因为我的应用程序处理了许多操作系统不支持的独特文件格式,并且没有以前的“所有者”。并且 Windows 不允许将空字符串传递给 SetAppAsDefault...

那我该怎么办?有什么好的解决办法吗?

最佳答案

我认为您以错误的方式使用默认程序 API。如果我理解正确,Microsoft 添加了默认程序功能,因为法律要求将 Internet Explorer 替换为默认浏览器。它提供了不同于应用程序使用的普通文件关联的另一组功能。如果您只有一个简单的文件关联来注册,我建议您坚持旧的行为。

来自 MSDN:Default Programs (Windows) :
默认程序 主要是为使用标准文件类型(如 .mp3 或 .jpg 文件)或标准协议(protocol)(如 HTTP 或 mailto)的应用程序设计的。使用自己的专有协议(protocol)和文件关联的应用程序通常不使用 默认程序 功能。

关于winapi - Windows Vista、默认程序 API、文件格式关联和(卸载)安装程序 - 爆炸性组合!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2501807/

相关文章:

c - GetMenuString 返回空字符串

python - 我应该在 Windows 7 中使用 Python 2.7 32 位还是 64 位

python - 关注终端

c++ - 如何为我的应用程序禁用 UAC

Java:复制 exe 文件并随后启动失败

c++ - 为什么用GetDC(0)绘制图形?一旦窗口移动到它们上方就会消失?

.net - 无法安装 Windows 7 SDK(需要已安装 .NET Framework 4)

c++ - 如何获取ime语言信息?( windows, C++ )

windows-7 - Windows Heroku 运行 rake db :migrate error "/usr/bin/env: ruby.exe: No such file or directory"

windows - 从 Vista 上的服务使用 CreateProcessAsUser 的桌面问题