2011-05-31 62 views
7

我一直在试图找到一种方法来更改 特定文件扩展名在Windows 7中的默认文件关联。我有一个应用程序,用于查看.tif 文件,我想提示用户,如果它不是该文件的默认查看器为 类型。如果他们选择将其设为默认,则我想要覆盖当前的默认查看器 。如果在 系统上没有安装其他查看器,这可以正常工作。当有已由用户选择的另一观众,我 不能改变的控制,这里的注册表项:有没有什么办法以编程方式设置“UserChoice”注册表项来接管文件类型关联?

 
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..."); 

是否有关于这个关键,防止它被 一些特殊的保护程序编辑?

+0

您是否尝试过更新它,例如在您使用管理员权限运行的控制台应用程序中? – ChristiaanV 2011-05-31 17:29:05

+0

这是一个桌面应用程序,作为我自己运行,但没有管理员权限。那是我的下一步。 – Jason 2011-06-01 18:30:56

+0

以管理员身份运行并没有帮助。 – Jason 2011-06-01 18:43:22

回答

0

它似乎不可更改,但您可以删除UserChoice

1

为了能够写入密钥UserChoice,您需要在写入密钥之前取得密钥的所有权(例如this代码 - 不是在c#(C++)中,但我认为它可以以同样的方式完成)。

您将能够写入密钥,并且您的文件关联代码将起作用!

编辑:也Registry Key Security and Access Rights on MSDN

0

如果您还没有想出一些方法来做到这一点尝试assocftype命令行工具。请注意,您需要使用管理权限运行它们。

  1. 创建批处理脚本,使用AssocFtype来设置文件关联。使用System.Diagnostics.Process来执行批处理脚本。

基本上,你必须创建一个.BAT(或.cmd)与以下行文件:

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

有关如何使用这些工具的更多信息,看一看:Managing Files from the Command Line- Assoc and Ftype

相关问题