14

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 を使用してフラグを立てる方法が必要です。実際に実行します。

4

3 に答える 3

19

このアプリを実行するためのデフォルト アクションとして [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
于 2013-06-07T10:46:27.970 に答える
13

ショートカットの「管理者として実行」フラグを本当に設定したい場合(ターゲット アプリケーションを管理者権限で強制的に実行するのとは対照的に)、次のコードを使用できます。

[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;

これは以下に基づいています。


Inno Setup の Unicode バージョンでテスト済み。しかし、とにかくUnicode バージョンを使用する必要がありますが、当然のことながら、Ansi バージョンでも動作するはずです。


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

ただし、アプリケーションを管理者権限で実行する十分な理由があることを確認してください。ユーザー アプリケーションには、管理者権限は必要ありません。彼らがそれを必要とする場合、それは通常、悪い設計の兆候です. アプリケーションを管理者権限で実行する必要がある一般的な (悪い) 理由の 1 つは、アプリケーションがそのインストール フォルダーに書き込む必要があることです。

Inno Setupでインストールするとアプリケーションが機能しないを参照してください

于 2017-01-06T19:43:31.407 に答える
3

セクションにrunascurrentuserflag 属性を追加します[Run]

Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: runascurrentuser nowait postinstall skipifsilent; 
于 2016-01-19T14:41:48.223 に答える