2013-06-07 31 views
10

Tworzę instalator za pomocą Inno Setup. W ramach procesu instalacji instaluję Tomcat. W Windows 7 I cierpią z powodu problemu opisanego tutaj:Jak ustawić "Uruchom jako administrator" dla pliku przy użyciu Inno Setup

http://blog.paulbouwer.com/2010/10/23/the-case-of-the-annoying-tomcat-6-monitor/

mogę to naprawić poprzez ręczne ustawienie „Uruchom jako administrator” na tomcat7w.exe (kwestia, a przyczyną jest taka sama dla tomcat7 również) , ale nie wiem jak to zrobić poprzez Inno Setup.

Znajduję wątki wyjaśniające działanie some_program.exe jako administratora, ale tutaj program jest uruchamiany po uruchomieniu usługi Tomcat (np. Przy uruchamianiu komputera), więc potrzebuję sposobu na oznaczenie jej przy użyciu Inno Setup, aby uruchomić jako administrator "zamiast go uruchamiać.

Dzięki

+4

Możesz dodać wpis rejestru w sekcji "[Rejestr]", która zostanie ustawiona na r un jako Administrator jako domyślną akcję dla runnint tej aplikacji. na przykład 'Root:" HKLM "; Podklucz: "SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \ Layers \"; ValueType: String; ValueName: "{app} \ tomcat7w.exe"; ValueData: "RUNASADMIN"; Flagi: uninsdeletekeyifempty uninsdeletevalue; MinVersion: 0,6.1' – RobeN

+1

możliwy duplikat [Jak utworzyć skrót do uruchomienia aplikacji z uprawnieniami administratora z wiersza cmd?] (Http://stackoverflow.com/questions/16083187/how-to-create-a -shortcut-to-launch-an-app-with-admin-privileges-from-the-cmd-lin) – TLama

+1

Działa doskonale, dziękuję. Widzę teraz, że powinienem opublikować to pytanie kilka godzin wstecz :). Jeśli chcesz, dodaj komentarz jako odpowiedź, aby móc go zaakceptować. Jeszcze raz dziękuję – learnAndImprove

Odpowiedz

12

Możesz dodać wpis do rejestru w [Registry] sekcji, która będzie wyznaczać run as Administrator jako domyślnego działania dla prowadzenia tej aplikacji.

Przykład:

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 
+4

Ustawienia zgodności są opaską, a nie właściwym rozwiązaniem. Właściwym rozwiązaniem w tym przypadku jest prawdopodobnie uruchomienie go jako usługi z wykorzystaniem poświadczeń administratora. – Miral

+0

Root: "HKCU" pracował dla mnie. –

1

Dodaj atrybut runascurrentuser flagę do sekcji

Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: runascurrentuser nowait postinstall skipifsilent; 
+2

Uruchomi plik wykonywalny jako administrator poprawnie po zakończeniu konfiguracji, ale nie spowoduje, że skrót na pulpicie uruchomi go jako administrator. – Winter

8

[Run] Jeśli naprawdę chcesz, aby ustawić "Uruchom jako administrator" banderą skrótu (jako przeciwieństwo aby wymusić uruchomienie aplikacji docelowej z uprawnieniami administratora), możesz użyć tego kodu:

[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 $20); 
    Stream.Seek(-1, soFromCurrent); 
    Stream.WriteBuffer(Buffer, 1); 
    finally 
    Stream.Free; 
    end; 
end; 

ta opiera się na:


Testowane na wersji Unicode Inno Setup. Ale powinno to, nawet bardziej naturalnie, działać również w wersji Ansi.


Jeśli chcesz zezwolić użytkownikowi na wykonanie programu na końcu instalacji za pomocą wpisu postinstall w [Run] sekcji, będzie oczywiście trzeba jawnie zażądać elewację.

Jeśli instalator uruchamia z uprawnienia administratora, można po prostu dodać runascurrentuser flag:

[Run] 
Filename: "{app}\MyProg.exe"; Description: "Launch application"; \ 
    Flags: postinstall nowait skipifsilent runascurrentuser 

Jeśli instalator uruchamia bez uprawnienia administratora, ustaw Verb parameter do runas (do tego trzeba również shellexec flagę) :

[Run] 
Filename: "{app}\MyProg.exe"; Verb: runas; Description: "Launch application"; \ 
    Flags: postinstall nowait skipifsilent shellexec 
+1

Dla deweloperów Inno: Jeśli wpis poinstalacyjny w sekcji [Uruchom] jest faktycznie innym plikiem wykonywalnym Inno Setup, zdefiniuj flagę, aby przechwycić kod powrotu (niepowodzenia) procesu podrzędnego z opcją XAND do kodu zwrotnego instalacji nadrzędnej . –

+1

@LaurieStearn Dlaczego wysyłasz tutaj zapytanie o funkcję? Opublikuj w serwisie Inno Setup. –

+1

[Tak, oczywiście] (http://news.jrsoftware.org/read/article.php?id=105253&group=jrsoftware.innosetup#105253). W każdym razie powinno to być XOR. Obejście dla postępu [tutaj] (https://stackoverflow.com/questions/40947436/inno-setup-make-inno-setup-installer-report-its-installation-progress-status-t). –

Powiązane problemy