ショートカットの「管理者として実行」フラグを本当に設定したい場合(ターゲット アプリケーションを管理者権限で強制的に実行するのとは対照的に)、次のコードを使用できます。
[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でインストールするとアプリケーションが機能しないを参照してください