実行可能ファイルを管理者が必要として明示しました:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<!-- Disable Windows Vista UAC compatability heuristics -->
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
</assembly>
そして、デジタル署名しました。
しかし、実行可能ファイルを実行すると、奇妙なことに気付きました。同意ダイアログの実行可能ファイルの名前が からPingWarning.exe
に変更されましたpinxxxx.tmp
。一時コピーが作成され、それが実行されているかのように:
実行可能ファイルを起動したときに誰かが*.tmpファイルを作成しているかどうかを確認するために、Process Montior を調べました。
この特定のコンテナー内のアプリケーション情報サービスは、実行可能ファイルを意図的に Windows 一時フォルダーにコピーし、そこからユーザーの「同意」を求めています。無効なファイル名を指定しています。svchost
同意が得られると、実行可能ファイルは元の場所から実行されます。
デジタル署名しないと、ファイルは一時フォルダーにコピーされません。
だから私の問題は、. _requireAdministrator
どうする?
アップデート:
私が見つけることができる説明に最も近いものはUninformed.orgからのものです :
ブローカーを破る
uiaccess を要求するプログラムの起動要求の場合、要求を処理するために appinfo!RAiLaunchAdminProcessが呼び出されます。次に、 appinfo!AiCheckSecureApplicationDirectoryによって、プロセスが (ハードコードされた) 許可されたディレクトリのセット内にあることが検証されます。プログラムが許可されたディレクトリ内から起動されていることを検証した後、制御は最終的にappinfo!AiLaunchProcessに渡され 、起動要求を処理するために必要な残りの作業が実行されます。この時点で、「安全な」アプリケーション ディレクトリの要件により、制限されたユーザー (または、さらに言えば、整合性の低い状態で実行しているユーザー) がカスタム実行可能ファイルを「安全な」アプリケーション ディレクトリに配置することはできません。
ヒントは、アプリケーションの配置が「許可」されている (文書化されておらず、指定されていない) ハードコードされたパスです。
もう 1 つはuiaccess を要求するプログラム用です。私の場合uiAccess="false"
、元のマニフェストにはありませんでした。ただし、no ui アクセスを含めるようにマニフェストを変更します。
しかし、それは元の問題を解決しませんでした。
更新 2:
MSDNから:
SendSAS関数
uiAccessフラグが trueに設定され たアプリケーションは、正常に起動するためにAuthenticode署名されている必要があり ます。さらに、アプリケーションはファイル システム内の保護された場所に存在する必要があります。現在、許可されている保護された場所は 2 つあります。
- **\プログラムファイル**
- **\windows\system32**
これは、要求している実行可能ファイルuiAccess
が許可された場所にある必要があるという考えを裏付けているようです。ただし、uiAccess を求めているわけではありません。