権限の昇格が必要なアプリケーションがあります (カスタム インストーラーのようなものです)。このアプリケーション内から、ShellExecute() を使用して PDF ファイルを表示します。Adobe Reader が呼び出し元のアプリケーションと同じ権限で起動されているように見えます。ただし、昇格せずに標準のユーザー権限で Adobe Reader を起動したいと思います。
それを行う方法はありますか?(それは Delphi にありますが、この問題ではおそらく言語は問題になりません)。
残念ながら、これを行うための本当に簡単な方法はありません。
これを行う 1 つの方法は、タスク スケジューラを使用することです。ITaskServiceインターフェイスを使用して、現在ログインしているユーザーの昇格されていない資格情報を使用して、タスクをすぐに実行するようにスケジュールします。
あなたが達成しようとしていることは、非常に簡単に行うことができず、サポートされていません。ただし、わずかなハッキングを使用することは可能です。Aaron Margosis は、1 つの手法を説明する記事を書きました。
関連セクションを引用するには、次の手順を実行する必要があります。
- 現在のトークンで SeIncreaseQuotaPrivilege を有効にする
- デスクトップ シェルを表す HWND を取得する (GetShellWindow)
- そのウィンドウに関連付けられているプロセスのプロセス ID (PID) を取得します (GetWindowThreadProcessId)
- そのプロセスを開く (OpenProcess)
- そのプロセスからアクセス トークンを取得する (OpenProcessToken)
- そのトークンでプライマリ トークンを作成します (DuplicateTokenEx)
- そのプライマリ トークン (CreateProcessWithTokenW) で新しいプロセスを開始します。
この記事には、Delphi に変換するのに十分なほど簡単なデモ C++ ソースのダウンロード リンクが含まれています。