问题描述
|
我一直在尝试找到一种方法来更改默认文件关联
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。