最近Vista 32ビットからWindows 7 64ビットに移行したため、私のプログラムの1つに管理者権限が必要になりました。
私はかなりエキゾチックなテキストエディタ(Crimson Editor)を使用しています。 Vist/Win7用に設計されていませんが、Vistaでうまく機能しました。しかし、Windows 7では、プログラムの実行可能ファイルはこのUACシールドをアイコンに追加し(互換性タブの[管理者として実行]フラグがnot設定されている場合でも)、実行するたびに昇格を要求します。
Win7は、このメモ帳のようなアプリケーションに管理者権限が必要であるとどのように判断しますか?この誤ったヒューリスティックをオーバーライドするにはどうすればよいですか?
いいえ、Crimson Editorがこれを行う理由は、署名されていないためではありません。 (これはWin7の新機能ではありません)。これは、コンパイル時に埋め込まれるアプリケーションマニフェストがrequestedPrivilegeLevel="highestLevel"
。
このフォーラムの投稿 によると、Crimson Editor開発者はリビジョン237-241でこれを変更しました。 「Crimson Editorをシェルのコンテキストメニューに追加する」機能には管理者権限が必要なため、これを行いました。
長期的な修正は、Crimson Editor開発者がアプリケーションマニフェストを修正することです。インストール中にシェルのコンテキストメニューに自分自身を追加するか、少なくともユーザーに、アプリを昇格させる必要があるのではなく、手動で実行する必要があることを通知する必要があります(これは簡単です)。
requestedPrivilegeLevel="highestLevel"
それらのマニフェストで(アプリケーションマニフェストを表示するには Manifest View を使用)、Microsoftの Application Compatibility Toolkit を使用して、RunAsInvokerフィックスでアプリケーションをシムし、アプリを強制的に標準ユーザートークンで実行します。
Application Compatibility Toolkitの使用方法の詳細については、クリムゾンエディターへの適用について この投稿 または 一般的な手順 を参照してください。
この問題のあるアプリケーションが2つあることがわかりました。 1つはファイル名に「更新」があり、もう1つは「ファイル記述子」に「更新」がありました。これら2つのアプリケーションからWordの「更新」を削除しただけで、UAC警告は表示されなくなりました。 「UACの仕組み」-「インストーラーの検出」の情報は次の場所にあります。
http://msdn.Microsoft.com/en-us/library/aa905330.aspx
次のように述べています:
インストーラー検出は以下にのみ適用されます:
- 32ビット実行可能ファイル
- RequestedExecutionLevelのないアプリケーション
- UACが有効になっている標準ユーザーとして実行されている対話型プロセス
32ビットプロセスが作成される前に、次の属性がチェックされ、インストーラーであるかどうかが判断されます。
- ファイル名には、「インストール」、「セットアップ」、「アップデート」などのキーワードが含まれています。
- 次のバージョン管理リソースフィールドのキーワード:ベンダー、会社名、製品名、ファイルの説明、元のファイル名、内部名、エクスポート名。
- 実行可能ファイルに埋め込まれたside-by-sideアプリケーションマニフェストのキーワード。
- 実行可能ファイルにリンクされている特定のStringTableエントリのキーワード。
- 実行可能ファイルにリンクされているリソースファイルデータの主要な属性。
実行可能ファイル内のターゲットバイトシーケンス。
注:キーワードとバイトのシーケンスは、さまざまなインストーラーテクノロジーから観察された共通の特性から導き出されました。
Visual Studioを使用している場合は、次の操作を実行できます。
HTH
ケバン
ここにヒューリスティックに関するいくつかの情報があります: http://msdn.Microsoft.com/en-us/library/aa905330.aspx
マニフェストは、これらのいくつかを制御するのに役立ちます。