我特别是指到Windows 7Windows 7的文件扩展名关联
我有一些代码,如下页上提出webJose一定的延伸与我的应用程序相关联: What registry keys are responsible for file extension association? (不过我正确写入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但不是编程)
我的问题是:是否有办法以编程方式实现这一点?与其他程序关联后,可以更改哪些注册表值以重新获得对扩展的控制权?
我知道,如果通过资源管理器的用户将关联的应用程序设置为扩展名,那么可以预期再次以相同的方式重新将扩展名关联到不同的应用程序。
然而,问题是我的应用程序中有一个按钮,它使用上述代码来检查与我的应用程序的扩展关联。不幸的是,对于上述情况,我的应用程序会显示一条消息,确认该扩展在它不是时已经成功关联!那么有没有办法解决这个问题?
即使使用管理员写入,也无法以编程方式以任何方式删除密钥。这是我的上述问题的原因,我如何删除它? – Tamer 2010-09-02 08:32:12
这是您系统的特点,而不是Windows标准。你安装的一些软件已经改变了密钥的ACL以防止你改变它......可能是在UserChoice下注册的任何软件。您应该可以授予自己访问权限,但是,请将其删除。 – 2010-09-02 13:08:52
你可以证实吗?我现在已经在以管理员身份运行该应用程序的多台机器上尝试过了。以编程方式拒绝访问该特定键“UserChoice”(既不写也不删除)。你是否说你可以通过编程的方式在你的机器上编辑这个键的值?有人可以确认吗? – Tamer 2010-09-03 00:21:20