Я написал программу, которая редактирует определенный тип файла, и я хочу дать пользователю возможность установить мое приложение в качестве редактора по умолчанию для этого типа файлов (поскольку я не хочу установщика) на старте.Связанное расширение файла с помощью приложения
Я попытался написать повторно используемый метод, который связывает файл для меня (желательно на любой ОС, хотя я использую Vista), добавляя ключ к HKEY_CLASSES_ROOT и использую его с моим приложением, но он, похоже, не работает.
public static void SetAssociation(string Extension, string KeyName, string OpenWith, string FileDescription)
{
RegistryKey BaseKey;
RegistryKey OpenMethod;
RegistryKey Shell;
RegistryKey CurrentUser;
BaseKey = Registry.ClassesRoot.CreateSubKey(Extension);
BaseKey.SetValue("", KeyName);
OpenMethod = Registry.ClassesRoot.CreateSubKey(KeyName);
OpenMethod.SetValue("", FileDescription);
OpenMethod.CreateSubKey("DefaultIcon").SetValue("", "\"" + OpenWith + "\",0");
Shell = OpenMethod.CreateSubKey("Shell");
Shell.CreateSubKey("edit").CreateSubKey("command").SetValue("", "\"" + OpenWith + "\"" + " \"%1\"");
Shell.CreateSubKey("open").CreateSubKey("command").SetValue("", "\"" + OpenWith + "\"" + " \"%1\"");
BaseKey.Close();
OpenMethod.Close();
Shell.Close();
CurrentUser = Registry.CurrentUser.CreateSubKey(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" + Extension);
CurrentUser = CurrentUser.OpenSubKey("UserChoice", RegistryKeyPermissionCheck.ReadWriteSubTree, System.Security.AccessControl.RegistryRights.FullControl);
CurrentUser.SetValue("Progid", KeyName, RegistryValueKind.String);
CurrentUser.Close();
}
Любая идея, почему это не сработает? Примером использования может быть
SetAssociation(".ucs", "UCS_Editor_File", Application.ExecutablePath, "UCS File");
Часть метода, который использует «CurrentUser», кажется, работает, если я делаю то же самое, используя Regedit, но с помощью моего приложения нет.
ты попытался запустить программу в качестве администратора? –
Я системный администратор, так что да. – User2400
UAC означает, что ваше приложение не запускается как admin, если вы его явно не требуете. Вы запускаете Vista, Vista включает UAC. Можете ли вы проверить, работает ли программа как администратор? –