web-dev-qa-db-ja.com

それを必要としないアプリケーションの昇格(UAC)を防止する

最近Vista 32ビットからWindows 7 64ビットに移行したため、私のプログラムの1つに管理者権限が必要になりました。

私はかなりエキゾチックなテキストエディタ(Crimson Editor)を使用しています。 Vist/Win7用に設計されていませんが、Vistaでうまく機能しました。しかし、Windows 7では、プログラムの実行可能ファイルはこのUACシールドをアイコンに追加し(互換性タブの[管理者として実行]フラグがnot設定されている場合でも)、実行するたびに昇格を要求します。

Win7は、このメモ帳のようなアプリケーションに管理者権限が必要であるとどのように判断しますか?この誤ったヒューリスティックをオーバーライドするにはどうすればよいですか?

34
SealedSun

いいえ、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の使用方法の詳細については、クリムゾンエディターへの適用について この投稿 または 一般的な手順 を参照してください。

22
the.d.stro

この問題のあるアプリケーションが2つあることがわかりました。 1つはファイル名に「更新」があり、もう1つは「ファイル記述子」に「更新」がありました。これら2つのアプリケーションからWordの「更新」を削除しただけで、UAC警告は表示されなくなりました。 「UACの仕組み」-「インストーラーの検出」の情報は次の場所にあります。

http://msdn.Microsoft.com/en-us/library/aa905330.aspx

次のように述べています:

インストーラー検出は以下にのみ適用されます:

  • 32ビット実行可能ファイル
  • RequestedExecutionLevelのないアプリケーション
  • UACが有効になっている標準ユーザーとして実行されている対話型プロセス

32ビットプロセスが作成される前に、次の属性がチェックされ、インストーラーであるかどうかが判断されます。

  • ファイル名には、「インストール」、「セットアップ」、「アップデート」などのキーワードが含まれています。
  • 次のバージョン管理リソースフィールドのキーワード:ベンダー、会社名、製品名、ファイルの説明、元のファイル名、内部名、エクスポート名。
  • 実行可能ファイルに埋め込まれたside-by-sideアプリケーションマニフェストのキーワード。
  • 実行可能ファイルにリンクされている特定のStringTableエントリのキーワード。
  • 実行可能ファイルにリンクされているリソースファイルデータの主要な属性。
  • 実行可能ファイル内のターゲットバイトシーケンス。

  • 注:キーワードとバイトのシーケンスは、さまざまなインストーラーテクノロジーから観察された共通の特性から導き出されました。

13
TheBeauty

Visual Studioを使用している場合は、次の操作を実行できます。

  1. 管理者としてVisual Studioを開きます。
  2. Ctrl-Oを押してファイルを開く
  3. Crimson Editorがあるフォルダーを参照し、cedt.exeを開きます。
  4. リソースエディタを使用してファイルを開くと、RT_MANIFESTという名前のブランチを持つツリーが表示され、これを展開して、「1 [English United States]」という名前の単一の子エントリをダブルクリックします。
  5. 右側の列の約4分の3のところに、requestedExecutionLevel level = "highestAvailable"が表示されます。 "highestAvailable"を "asInvoker"に変更します(デフォルトでは、エディターは上書きタイプモードで開きます。
  6. ファイルを保存すれば完了です。

HTH

ケバン

7
kevanb

ここにヒューリスティックに関するいくつかの情報があります: http://msdn.Microsoft.com/en-us/library/aa905330.aspx

マニフェストは、これらのいくつかを制御するのに役立ちます。

4
AaronLS