Я бы не рекомендовал использовать для этого сторонний компонент, поскольку это только усложнит ситуацию.
Мы все знаем, как создавать ассоциации файлов, редактируя ульи HKEY_CURRENT_USER
и HKEY_LOCAL_MACHINE
, верно? В Windows Vista + редактирование первого не вызывает проблем, но если по какой-то причине вы хотите отредактировать второе, т.е. если вы хотите редактировать ассоциации для всех пользователей на машине, то ваше приложение должно работать с повышенными привилегиями.
Чтобы приложение запускалось с повышенными правами, пользователь может щелкнуть правой кнопкой мыши значок и выбрать «Запуск от имени администратора». Но это безобразно. Однако можно заставить приложение автоматически запускаться от имени администратора, просто добавив манифест (файл XML) к ресурсу приложения. Затем приглашение UAC автоматически появится после выполнения файла * .exe, независимо от того, как конечный пользователь запустит программу, и программа запустится от имени администратора и вполне сможет изменить куст HKEY_LOCAL_MACHINE
. Детали того, как добавить этот манифест, были объяснены в нескольких вопросах SO. Это действительно легко.
Насколько я знаю, работающее приложение не может "обновить" свои привилегии во время выполнения. Так что если у вас есть кнопка в вашем приложении, работающая с обычными привилегиями, вы не можете сделать что-то вроде этого:
procedure Button1.Click(Sender: TObject);
begin
SomehowGetAdminPrivileges;
ChangeLocalMachineRegistry;
SomehowGetBackNormalPrivileges;
end;
Это просто невозможно. Поэтому, если вам нужно сделать что-то, что требует прав администратора во время выполнения, вам нужно вызвать внешнее приложение, как в
procedure Button1.Click(Sender: TObject);
begin
ShellExecute(Application.Handle, nil, PChar('myapp.exe'), nil, nil, SW_SHOWNORMAL);
end;
myapp.exe должен иметь манифест, чтобы он работал с повышенными привилегиями и мог делать то, что вы хотите. Но желательно, чтобы myapp.exe не имел графического интерфейса - когда пользователь нажимает кнопку, появляется приглашение UAC, и myapp.exe выполняет изменение реестра, а затем завершает работу.
Было бы возможно, но неудобно сделать это, используя сторонний компонент.
Вам нужно изменить реестр во время установки? Если вы используете Inno Setup, профессиональный * и бесплатный инструмент , Inno Setup предоставит вам манифест. Следовательно, приглашение UAC будет отображаться при запуске setup.exe (скомпилированного с помощью Inno Setup), если этого требует установка, например, если установка внесет какие-либо изменения в HKEY_LOCAL_MACHINE
.