2011-01-05 3 views
4

В настоящее время у меня есть программа, которая устанавливает ассоциацию файлов с помощью реестра (обратите внимание, что это .NET 2.0, поэтому мне нужно пройти через метод реестра). Проблема в том, что, поскольку она пытается писать в HKCR, существует вероятность того, что она столкнулась с административной проблемой (на других машинах). Существует ли более универсальный способ установления ассоциации файлов (для .NET 2.0), например, с использованием HKCU или какого-либо другого метода, который не требует административных прав.C# - File Assocation Доступ к разделу реестра «HKEY_CLASSES_ROOT » отрицается

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

ответ

16

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

+1

+1 больше, чем я предлагал! –

+0

@ Давид Да ... но это дешево. Сначала вы ответили, я просто ловил за голоса :) –

+0

Благодарим вас за всю информацию. Похоже, использование HKCU было бы более уместным. Для установщика я в настоящее время использую установщик Visual Studios. Кроме того, в моем приложении есть возможность отключить ассоциацию файлов, поэтому она выходит за рамки программы установки. – user

4

Вы можете использовать user-specific file associations в ситуациях, когда у вас нет доступа к HKLM.

В качестве альтернативы вы можете использовать приложение для защиты прав администратора.

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

+0

Как я ответил на ответ Иана, настройки реестра выходят за рамки простой установки. Кроме того, мне бы не хотелось калечить программу, чтобы она была доступна только администраторам. +1 хотя для полезной ссылки. – user

+0

@Nate Fine, я только что написал то, что знал, и теперь, конечно, вы можете извлечь из этого все, что окажется полезным –