有什么办法以编程方式设置“ UserChoice”注册表项来接管文件类型关联?

| 我一直在尝试找到一种方法来更改默认文件关联 Windows 7中特定的文件扩展名。我有一个用于查看.tif的应用程序 我要提示用户的文件,如果它不是该文件的默认查看器 类型。如果他们选择将其设置为默认值,则我想覆盖当前值 默认查看器。如果没有其他查看器安装在 系统。当用户选择了另一个查看器时,我 无法更改用于控制此处的注册表项: HKCU \\软件\\ 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...\");
该密钥上有一些特殊的保护措施可以防止它被盗用吗? 以编程方式进行编辑?     
已邀请:
        为了能够写入密钥UserChoice,您需要在写入密钥之前先拥有密钥的所有权(例如此代码-不在c#(C ++)中,但我认为可以用相同的方式完成)。 您将能够写入密钥,并且文件关联代码将起作用! 编辑:另请参见MSDN上的注册表项安全性和访问权限     
        似乎无法更改,但您可以删除
UserChoice
。     
        该链接可能为您提供了更多信息:如何使用C#和以下注册表项所有权:RegOpenKeyEx和RegSetKeySecurity?     
        如果您还没有找到解决方法,请尝试使用assoc和ftype命令行工具。但是请注意,您将需要使用管理特权来运行它们。 创建一个使用
Assoc
Ftype
设置文件关联的批处理脚本。 使用System.Diagnostics.Process执行批处理脚本。 基本上,您必须使用以下几行来创建.bat(或.cmd)文件:
ASSOC .txt=TXTFileWordPad    
FTYPE TXTFileWordPad=\"%ProgramFiles%\\Windows NT\\Accessories\\wordpad.exe\" %%1
有关如何使用这些工具的更多信息,请参见:从命令行管理文件Assoc和Ftype。     

要回复问题请先登录注册