我特指Windows 7。
我有将某个扩展名与我的应用程序相关联的代码,如 webJose 在以下页面上提出的那样: 哪些注册表项负责文件扩展名关联? (但是我按照建议正确写入 HKEY_CURRENT_USER\Software\Classes 而不是 HKEY_CLASSES_ROOT)
上述方法最初有效,或者如果没有与扩展相关的其他程序。然而,在使用 Windows 7 内置的“选择默认程序...”(在“打开方式”下的文件右键单击上下文菜单下找到)后,它会将扩展名与您选择的任何新程序重新关联。
此时发生的情况是系统更改了“HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\\UserChoice”,因此新选择的程序会接管。
运行上面的代码,重新获得对扩展的控制是行不通的。重新获得控制权的唯一方法是:
- 编辑 UserChoice -> Progid 值,这是不允许的(既不以编程方式也不使用 regedit.exe - 拒绝访问)。
- 或者删除 UserChoice 值并确保您的应用程序是 \OpenWithList 下 MRUList 值中的第一个(这可以使用 regedit.exe 来实现,但不能以编程方式实现)
我的问题是:有没有办法以编程方式实现这一目标?在与另一个程序关联后,可以更改哪些注册表值以重新获得对扩展的控制?
我知道,如果用户通过资源管理器将关联的应用程序设置为扩展,那么它可能会以同样的方式再次将扩展重新关联到不同的应用程序,这似乎很明显。
然而问题是我的应用程序中有一个按钮,它使用上述代码检查与我的应用程序的扩展关联。不幸的是,在上述情况下,我的应用程序会显示一条消息,确认该扩展程序已成功关联,但未成功关联!那么有没有办法解决这个问题?