NateShoffner
NateShoffner

Reputation: 16829

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

Upvotes: 9

Views: 13866

Answers (2)

Ian Boyd
Ian Boyd

Reputation: 256721

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.

Upvotes: 23

David Heffernan
David Heffernan

Reputation: 612964

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.

Upvotes: 6

Related Questions