C#-对注册表项的文件关联访问权';HKEY#U CLASSES#U ROOT\&x27;被拒绝

C#-对注册表项的文件关联访问权';HKEY#U CLASSES#U ROOT\&x27;被拒绝,c#,registry,file-association,C#,Registry,File Association,我目前有一个使用注册表设置文件关联的程序(注意,它是.NET2.0,所以我必须使用注册表方法)。问题是,由于它试图写入HKCR,因此可能会(在其他机器上)遇到管理问题。是否有更通用的方法来设置文件关联(对于.NET 2.0),例如使用HKCU或其他不需要管理权限的方法 string keyName = "Class"; string keyValue = "Class File"; string apppath = Application.ExecutablePath.ToLower() + "

我目前有一个使用注册表设置文件关联的程序(注意,它是.NET2.0,所以我必须使用注册表方法)。问题是,由于它试图写入HKCR,因此可能会(在其他机器上)遇到管理问题。是否有更通用的方法来设置文件关联(对于.NET 2.0),例如使用HKCU或其他不需要管理权限的方法

string keyName = "Class";
string keyValue = "Class File";
string apppath = Application.ExecutablePath.ToLower() + " \"%1\"";
RegistryKey key;
key = Registry.ClassesRoot.CreateSubKey(keyName);
key.SetValue("", keyValue);

RegistryKey iconkey;
key = Registry.ClassesRoot.CreateSubKey(keyName);
iconkey = key.CreateSubKey("DefaultIcon");
iconkey.SetValue("", Environment.CurrentDirectory + "\\resources\\musicfile.ico");

key = key.CreateSubKey("shell");
key = key.CreateSubKey("open");
key = key.CreateSubKey("command");
key.SetValue("", apppath);
您可以在无法访问HKLM的情况下使用

或者,您可以将应用程序清单化以要求管理员权限


通常情况下,在应用程序安装过程中会设置文件关联,其中管理员权限通常可用。

HKEY_CLASSES\u ROOT
是其他两个位置的别名和合并:

  • HKEY\U当前用户\软件\课程
  • HKEY\U LOCAL\U MACHINE\Software\Classes
您必须决定注册文件的原因。文件注册是否应该针对所有用户?如果是这样,您希望注册与
HKEY\U CLASSES\U ROOT
的关联(这将隐式地将其写入
HKEY\U LOCAL\U MACHINE

或者注册仅针对当前用户?如果是,请在
HKEY\U current\U user
中注册您的文件

记住,仅仅因为一个用户安装你的程序并不意味着所有的用户都想拥有它,所以考虑程序是什么。


无论哪种方式,注册文件关联的正确时间是在安装MSI安装程序期间。MSI安装程序知道如何在安装期间请求提升(如果需要)。并非所有软件都必须进入
程序文件中,有些软件可以进入
%APPDATA%
(即Chrome)安装时不需要管理员权限,而且只为一个用户安装。

@David Yeah…但它有点便宜。你先回答了,我只是想投票:)谢谢你提供的所有信息。使用香港大学似乎更合适。对于安装程序,我目前使用Visual Studio提供的安装程序。另外,在我的应用程序中,有一个选项可以禁用文件关联,因此它超出了安装程序的范围。另外,我不想破坏程序,只允许管理员访问+1尽管是有用的链接。@Nate很好,我只是写了我知道的,现在你当然可以从中得到任何有用的东西