开发者

C# - File Assocation Access to the registry key 'HKEY_CLASSES_ROOT\' is denied

I currently have a program that sets file association using the registry (Note, it's a .NET 2.0 so I have to go through the registry method). The problem is, since it's trying to write to HKCR, the possibility exists of it running into an administrative problem (开发者_如何学运维on other machines). Is there a more universal way to set file association (for .NET 2.0) such as using HKCU or some other method that doesn't require administrative privileges.

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


HKEY_CLASSES_ROOT is an alias, a merging, of two other locations:

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

You have to decide why you're registering the file. Is the file registration supposed to be for all users? If so, you want to register the association with HKEY_CLASSES_ROOT (which will implicitly write it to HKEY_LOCAL_MACHINE.

Or is the registration meant for only the current user? If so, register your file in HKEY_CURRENT_USER.

Keep in mind that just because one user installs your program doesn't mean that all users want to have it; so consider what the program is for.

Either way, the proper time to register your file association was during installation with the MSI installer. MSI installers know how to ask for elevation during install - if it's required. Not all software has to go in Program Files, some can go in %APPDATA% (i.e. Chrome) where no admin privileges are required to install - and it's only installed for the one user.


You can use user-specific file associations in situations where you do not have access to HKLM.

Alternatively you can manifest your app to require administrator rights.

More normally file associations are set during application install where admin rights are normally available.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜