Как установить "Запуск от имени администратора" в файле с помощью Inno Setup
Я создаю установщик с помощью Inno Setup. В рамках процесса установки я устанавливаю Tomcat. На Windows 7 я страдаю от проблемы, описанной здесь:
http://blog.paulbouwer.com/2010/10/23/the-case-of-the-annoying-tomcat-6-monitor/
Я могу исправить это, вручную установив "Запуск от имени администратора" на tomcat7w.exe
(проблема и первопричина одинаковы для tomcat7), но я не знаю, как это сделать через Inno Setup.
Я нахожу потоки, которые объясняют запуск some_program.exe
как администратор, но здесь программа запускается при запуске службы Tomcat (например, при запуске машины), поэтому мне нужен способ пометить его с помощью Inno Setup для "запуска от имени администратора", а не фактически запустить его.
спасибо
3 ответов
вы можете добавить запись в реестре [Registry]
раздел, который будет установлен run as Administrator
как действие по умолчанию для запуска этого приложения.
пример:
Root: "HKLM"; Subkey: "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers"; \
ValueType: String; ValueName: "{app}\tomcat7w.exe"; ValueData: "RUNASADMIN"; \
Flags: uninsdeletekeyifempty uninsdeletevalue; MinVersion: 0,6.1
если вы действительно хотите установить "Запуск от имени администратора" флаг ярлыка (в отличие от принудительного запуска целевого приложения с правами администратора), вы можете использовать этот код:
[Icons]
Name: "{userdesktop}\My Program"; Filename: "{app}\MyProg.exe"; \
AfterInstall: SetElevationBit('{userdesktop}\My Program.lnk')
[Code]
procedure SetElevationBit(Filename: string);
var
Buffer: string;
Stream: TStream;
begin
Filename := ExpandConstant(Filename);
Log('Setting elevation bit for ' + Filename);
Stream := TFileStream.Create(FileName, fmOpenReadWrite);
try
Stream.Seek(21, soFromBeginning);
SetLength(Buffer, 1);
Stream.ReadBuffer(Buffer, 1);
Buffer[1] := Chr(Ord(Buffer[1]) or );
Stream.Seek(-1, soFromCurrent);
Stream.WriteBuffer(Buffer, 1);
finally
Stream.Free;
end;
end;
это основано на:
- LinkFlags in [MS-SHLLINK]: Shell Link (.LNK) двоичный формат файла;
- как создать ярлык запуска от имени администратора с помощью В PowerShell;
- как я могу использовать JScript для создания ярлыка, который использует "Запуск от имени администратора"
протестировано на Unicode версии Inno Setup. Но это должно, еще более естественно, работать и на версии Ansi, хотя вы следует использовать Unicode version в любом случае.
если вы хотите разрешить пользователю выполнять программу в конце установки с помощью postinstall
запись в [Run]
раздел, вам, конечно, нужно будет явно запросить высоту.
если программа установки работает С правами администратора, вы можете просто добавить runascurrentuser
флаг:
[Run]
Filename: "{app}\MyProg.exe"; Description: "Launch application"; \
Flags: postinstall nowait skipifsilent runascurrentuser
если программа установки работает без права администратора, установить Verb
параметр до runas
(для этого Вам также понадобится shellexec
флаг):
[Run]
Filename: "{app}\MyProg.exe"; Verb: runas; Description: "Launch application"; \
Flags: postinstall nowait skipifsilent shellexec
добавить флаг [Run]
раздел
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: runascurrentuser nowait postinstall skipifsilent;