C # - сопоставление файлов Доступ к разделу реестра 'HKEY_CLASSES_ROOT \' запрещен - PullRequest
5 голосов
/ 05 января 2011

В настоящее время у меня есть программа, которая устанавливает связь файлов с помощью реестра (обратите внимание, что это .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 ]

17 голосов
/ 05 января 2011

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% (т.е.) где для установки не требуются права администратора, и она устанавливается только для одного пользователя.

5 голосов
/ 05 января 2011

Вы можете использовать пользовательские ассоциации файлов в ситуациях, когда у вас нет доступа к HKLM.

В качестве альтернативы вы можете манифестировать ваше приложение, требуя прав администратора.

Обычно ассоциации файлов устанавливаются при установке приложения, где обычно доступны права администратора.

...