Windows 7文件扩展名关联

Tam*_*mer 7 file-association windows-7

我指的是Windows 7.

我有一些代码将某个扩展名与我的应用程序相关联,如webJose在下一页所提出的: 哪些注册表项负责文件扩展名关联? (但我按照建议正确写入HKEY_CURRENT_USER\Software\Classes而不是HKEY_CLASSES_ROOT)

以上工作最初,或者如果没有与扩展相关联的其他程序.但是,在使用Windows 7内置的"选择默认程序..."(在"打开方式"下的文件右键单击上下文菜单下找到)后,它会将扩展名与您选择的任何新程序重新关联.

此时发生的情况是系统更改了"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts \\ UserChoice",因此新选择的程序将接管.

运行上面的代码,重新获得对扩展的控制将无法正常工作.重新获得控制权的唯一方法是:

  1. 编辑UserChoice - > Progid值,这是不允许的(既不以编程方式也不使用regedit.exe - 访问被拒绝).
  2. 或删除UserChoice值并确保您的应用程序是\ OpenWithList下MRUList值中的第一个(这可以使用regedit.exe但不能以编程方式实现)

我的问题是:有没有办法以编程方式实现这一目标?在与另一个程序关联后,可以更改哪些注册表值以重新获得对扩展的控制权?

我知道很明显,如果用户通过资源管理器将关联的应用程序设置为扩展,那么预期它会以相同的方式再次将扩展重新关联到不同的应用程序.

但问题是我的应用程序中有一个按钮,它使用上面提到的代码来检查与我的应用程序的扩展关联.不幸的是,在上述情况下,我的应用程序会显示一条消息,确认扩展已经成功关联,而不是!那么有办法解决这个问题吗?

Fac*_*tic 4

删除UserChoice应将默认程序恢复为标准文件关联键(以 HKCU 中的 ProgID 开头)。除非您也可以删除OpenWithList,这将带来极大的偏见。

编辑: 查看MSDN 上的注册表项安全和访问权限,特别是RegSetKeySecurity函数。请记住,您需要先授予自己对该密钥的管理控制权,然后才能将其删除。