必要のないアプリケーションの昇格(UAC)を防ぐ[複製]


34

この質問にはすでに答えがあります:

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

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

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

回答:


22

いいえ、Crimson Editorがこれを行う理由は、署名されていないからではありません。(そして、これはWin7にとって新しいものではありません)。これは、コンパイル時に埋め込まれるアプリケーションマニフェストがを指定しているためrequestedPrivilegeLevel="highestLevel"です。

このフォーラムの投稿によると、Crimson Editorの開発者はリビジョン237-241でこれを変更しました。これは、「Crimson Editorをシェルコンテキストメニューに追加する」機能には管理者権限が必要なためです。

長期的な修正は、Crimson Editor開発者がアプリケーションマニフェストを修正することです。インストール中にシェルコンテキストメニューに自分自身を追加するか、少なくともユーザーにアプリを要求する代わりに手動で昇格させる(簡単に実行する)ように指示する必要があります。

requestedPrivilegeLevel="highestLevel"マニフェスト内にあるすべてのアプリ(マニフェストビューを使用してアプリケーションマニフェストを表示する)では、MicrosoftのApplication Compatibility Toolkitを使用して、アプリケーションをRunAsInvoker修正でシムできます。これにより、アプリが標準ユーザートークンで実行されます。

Application Compatibility Toolkitの使用方法の詳細については、Crimson Editorへの適用に関する一般的な記事、または一般的な手順を参照してください


1
または、コマンドラインmt.exeツールを使用して既存のマニフェストを置き換えることもできます。このツールは、Visual Studio Expressで無料で入手できます(この問題に頻繁に遭遇した場合は、時間がかかりますが)。埋め込まれたマニフェストを置き換えると、.exeファイルが変更されるため、a)破損した場合にそのコピーがあることを確認し、b)署名された場合、署名を破損します(ただし、この場合は、とにかく未署名であると既に判断されています)。
AdamV 2009年

the.d.stro、あなたは命の恩人、それは素晴らしい仕事をしています。
phloopy

1
「アプリケーションを修正」して +1 し、AppCompatツールキットを使用してバグを修正します。
イアン・ボイド

13

この問題のあるアプリケーションが2つあることがわかりました。1つはファイル名に「更新」があり、もう1つは「FileDecsription」に「更新」がありました。これら2つのアプリケーションから「更新」という単語を削除しただけで、UAC警告はなくなりました。「UACの仕組み」-「インストーラーの検出」で情報を見つけました:

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

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

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

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

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

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

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


7

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"に変更します(NBはエディターがデフォルトでオーバータイプモードで開きます。
  6. ファイルを保存すれば完了です。

HTH

ケバン


4

ヒューリスティックに関する情報はここにあります:http : //msdn.microsoft.com/en-us/library/aa905330.aspx

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


MSDNは、マニフェストの「埋め込み」について説明しています。プログラムをコンパイルするときにそうしませんか?そのようなマニフェストをそこに入れるには、自分でCrimson Editorをコンパイルする必要がありますか?
SealedSun 09

5
同じフォルダーにfilename.exe.manifestファイルを追加すると、Windowsはそれを適切に読み取ります。
ファクターミスティック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.