Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как обойти необходимость административных прав для добавления записи в HKEY_CLASSES_ROOT в Windows 7

Delphi , ОС и Железо , Реестр

Вопрос добавления приложения в раздел "Открыть с помощью..." системного меню в Windows 7 затрагивает использование реестра Windows. Обычно для редактирования ключей в реестре, таких как HKEY_CLASSES_ROOT, требуются административные права. Однако существует способ обойти эту необходимость.

Описание проблемы

Пользователи часто сталкиваются с проблемой, когда при попытке добавить ключ в раздел HKEY_CLASSES_ROOT в операционной системе Windows 7 без использования административных прав возникает ошибка. Это может быть вызвано, например, при попытке автоматически добавить приложение в список программ, которые могут открывать определенные типы файлов.

Пример кода, вызывающего ошибку

procedure TForm1.Button1Click(Sender: TObject);
var
   Reg: TRegistry;
   appfilename: string;
begin
   appfilename:= application.ExeName;
   Reg := TRegistry.Create;
   Reg.RootKey := HKEY_CLASSES_ROOT;
   if not reg.KeyExists('Applications\MyAppName.exe\shell\open\command') then
   begin
     if reg.OpenKey('Applications\MyAppName.exe\shell\open\command', True) then
     begin
      reg.WriteString('', '"' + appfilename + '" "%1"');
      reg.CloseKey;
     end;
   end;
   // Важно: не забудьте освободить объект TRegistry, чтобы избежать утечки памяти
   // Reg.Free;
end;

Подтвержденное решение

Для решения данной проблемы необходимо использовать другой раздел реестра, а именно HKEY_CURRENT_USER\Software\Classes. Изменения, внесенные в этот раздел, будут автоматически отображаться в HKEY_CLASSES_ROOT.

Пример кода с использованием HKEY_CURRENT_USER

procedure TForm1.AddAppInOpenWith;
var
   Reg: TRegistry;
   appfilename: string;
begin
   appfilename:= application.ExeName;
   Reg := TRegistry.Create;
   Reg.RootKey := HKEY_CURRENT_USER;
   try
      if not reg.KeyExists('Software\Classes\Applications\AppName.exe\shell\open\command') then
      begin
        if reg.OpenKey('Software\Classes\Applications\AppName.exe\shell\open\command', True) then
        begin
          reg.WriteString('', '"' + appfilename + '" "%1"');
          reg.CloseKey;
        end;
      end;
   finally
      Reg.Free;
   end;
end;

Комментарии и дополнительные сведения

  • Необходимо корректно освободить объект TRegistry для предотвращения утечки памяти. Это делается с помощью метода Free.
  • Использование манифеста также может быть альтернативным решением, но это обычно делается в установщике программы.
  • Важно понимать, что изменения в HKEY_CURRENT_USER будут применяться только для текущего пользователя, а не для всех пользователей системы.

Следуя этим рекомендациям, вы сможете добавить приложение в список программ, доступных для выбора в разделе "Открыть с помощью...", не требуя административных прав.

Создано по материалам из источника по ссылке.

Пользователь ищет способ добавить запись в реестр `HKEY_CLASSES_ROOT` для включения приложения в меню 'Открыть с помощью' в Windows 7 без использования административных прав.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Реестр ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-03-13 20:43:45/0.0033149719238281/0