Windows 7文件扩展名关联

问题描述 投票:7回答:2

我指的是Windows 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”,因此新选择的程序将接管。

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

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

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

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

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

windows-7 file-association
2个回答
4
投票

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

编辑:在MSDN上查看Registry Key Security and Access Rights,特别是RegSetKeySecurity函数。请记住,在删除密钥之前,您需要授予自己对密钥的管理控制权。


2
投票

关于Window 7中的文件关联,一个新的“问题”已经过了。

这就是其中之一:你要争取自己的权利。

假设你喜欢跑步

REG.exe DELETE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mov\UserChoice" /f /va

你会得到ACCESS DENYED。当您在Regedit'UserChoice'中检查密钥的安全设置时,您将看到为您设置了一个设置窗口,拒绝为当前用户设置'set'。那你可以在regedit中更改/删除此设置,现在你可以删除UserChoice。然而,对于程序员/脚本编写者来说,设置有点讨厌,因为现在有很多工具可以在注册表中设置ACL。但是,这里有一些解决方法,允许删除ACCESS DENYED的密钥(当然这仅限于你有权更改权限):

ResetMovAssoc.cmd

::create 'empty.hiv' 
REG ADD "HKCU\emptyKey" /f
REG SAVE "HKCU\emptyKey" empty.hiv /y
@REG DELETE "HKCU\emptyKey" /f >nul
::^-note you can add @[...] >nul to the other entries as well to run them quite

:: Delete Reg key by replacing it with an empty hiv
REG RESTORE "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.mov" empty.hiv
del empty.hiv

总结一下,这里的主要内容是包含just和empty键的REG RESTORE + Registry配置单元文件。在Regedit中,只相当于一个空的注册表结构文件的“导入”(注意:这是一个配置单元文件而不是* .reg文件)。

© www.soinside.com 2019 - 2024. All rights reserved.