7

我目前有一个使用注册表设置文件关联的程序(注意,它是 .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);
4

2 回答 2

20

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),无需管理员权限即可安装 - 并且仅为一个用户安装。

于 2011-01-05T20:03:03.700 回答
5

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

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

更常见的文件关联是在管理员权限通常可用的应用程序安装期间设置的。

于 2011-01-05T19:53:27.240 回答