有没有一种编程方式可以设置"UserChoice"注册表键以接管文件类型关联?

12

我一直在尝试找到一种方法来更改Windows 7中特定文件扩展名的默认文件关联。我有一个用于查看.tif文件的应用程序,如果它不是该文件类型的默认查看器,则希望提示用户。如果他们选择将其设为默认值,则要覆盖当前默认查看器。如果系统上安装了其他查看器,则无法更改由此处控制的注册表键:

HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice

我已经搜遍了网络,试图找到曾经做过这件事情的人,但似乎没有人有任何答案。当我尝试更新此键中的“Progid”值时,我会收到“无法写入注册表键”或“请求的注册表访问不被允许”错误。代码足够简单:

var path = @"Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tif\UserChoice";
var key = Registry.CurrentUser.OpenSubKey(path, true);
key.SetValue("Progid", "myprogid...");

这个键是否有特殊保护,以防止它被程序编辑?


你尝试过更新它吗?例如在控制台应用程序中,你以管理员权限运行它了吗? - ChristiaanV
这是一个桌面应用程序,以我的身份运行,但没有管理员权限。这是我的下一步。 - Jason
以管理员身份运行没有帮助。 - Jason
你正在寻找这个函数吗?http://msdn.microsoft.com/en-us/library/windows/desktop/bb776332(v=vs.85).aspx - Simon Mourier
这个问题"通过C#从注册表中的'UserChoice'键中删除'Deny'规则(权限)"以及此答案可能会有所帮助。 - DavidRR
4个回答

1

要能够写入键UserChoice,您需要在写入之前拥有该键的所有权(类似于this代码 - 不是C#(C++),但我认为可以用相同的方式完成)。

您将能够写入该键,并且您的文件关联代码将正常工作!

编辑:另请参阅MSDN上的注册表键安全性和访问权限


0
如果你还没有找到一种方法来做到这一点,可以尝试使用assocftype命令行工具。请注意,你需要以管理员权限运行它们。
  1. 创建一个批处理脚本,使用AssocFtype来设置文件关联。
  2. 使用System.Diagnostics.Process执行批处理脚本。

基本上,你需要创建一个包含以下内容的.bat(或.cmd)文件:

ASSOC .txt=TXTFileWordPad    
FTYPE TXTFileWordPad="%ProgramFiles%\Windows NT\Accessories\wordpad.exe" %%1

如需了解如何使用这些工具,请查看:从命令行管理文件-关联和ftype



-1

看起来似乎不可更改,但您可以删除UserChoice


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接