C# - 文件关联拒绝访问注册表项"HKEY_CLASSES_ROOT"

use*_*ser 5 c# registry file-association

我目前有一个程序,使用注册表设置文件关联(注意,它是一个.NET 2.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);
Run Code Online (Sandbox Code Playgroud)

Ian*_*oyd 17

HKEY_CLASSES_ROOT 是另外两个位置的别名,合并:

  • HKEY_CURRENT_USER\Software\Classes
  • HKEY_LOCAL_MACHINE\Software\Classes

您必须确定注册文件的原因.文件注册是否应该适用于所有用户?如果是这样,您想要注册关联HKEY_CLASSES_ROOT(将隐式地将其写入HKEY_LOCAL_MACHINE.

或者注册仅适用于当前用户?如果是这样,请注册您的文件HKEY_CURRENT_USER.

请记住,仅仅因为一个用户安装您的程序并不意味着所有用户都希望拥有它; 所以请考虑该计划的用途.

无论哪种方式,在使用MSI安装程序进行安装期间,注册文件关联的适当时间.MSI安装程序知道如何在安装期间要求提升 - 如果需要的话.并非所有软件都必须进入Program Files,有些可以进入%APPDATA%(即Chrome),其中不需要安装管理员权限 - 并且它仅为一个用户安装.


Dav*_*nan 5

您可以在无权访问HKLM的情况下使用特定用户的文件关联.

或者,您可以显示您的应用以要求管理员权限.

通常,在应用程序安装期间设置文件关联,其中管理员权限通常可用.