C# - сопоставление файлов Доступ к разделу реестра 'HKEY_CLASSES_ROOT\' запрещен
В настоящее время у меня есть программа, которая устанавливает связь файлов с помощью реестра (обратите внимание, что это.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);
2 ответа
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), где для установки не требуются права администратора, и он устанавливается только для одного пользователя.
Вы можете использовать пользовательские ассоциации файлов в ситуациях, когда у вас нет доступа к HKLM.
В качестве альтернативы вы можете манифестировать ваше приложение, требуя прав администратора.
Обычно ассоциации файлов устанавливаются во время установки приложения, где обычно доступны права администратора.