web-dev-qa-db-ja.com

アプリケーションを管理者権限で実行する必要がないことをWindows7に伝えるにはどうすればよいですか?

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

Windows Vista/Windows 7より前に作成されたアプリケーションを使用しています。Windowsは、アプリケーションを管理者として実行する必要があると判断しました(つまり、シールドアイコンがあります)。アプリケーションのマニフェストには、昇格された特権で実行する必要があることを示すものは何もないと確信しています(Windows Vistaより前に作成された方法です)。

特定のアプリケーションが昇格された特権を必要としないことをWindowsに伝える方法はありますか?

8
user13141

Windowsは、さまざまな基準に基づいてアプリケーションを自動的に昇格させます( Windows Vistaでのユーザーアカウント制御の理解と構成 にリストされています):

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

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

ファイルの名前を変更しても昇格を防ぐことができない場合は、 昇格を防ぐマニフェストを作成する ができるはずです。

14
bk1e

プログラムが適切に記述されていて、標準ユーザーとして実行すると実際に動作すると仮定すると、標準ユーザーとして実行するように明示できます。

:プログラムがWindows XPで動作しなかった場合、WindowsVistaまたはWindows7では引き続き失敗します。このアプリケーションはログに記録することでテストできます。 WindowsにXPそしてそれが機能するかどうかを確認します。(あなたdoWindowsにログインしますXP標準ユーザーとしてですよね?)

プログラムがWindows XP標準ユーザーとして正しく実行されない場合、Windows 7では標準ユーザーとして実行されません。プログラムを管理者としてWindows XPで実行する必要がある場合は、 Windows7では管理者としてプログラムを実行する必要があります。

プログラムを管理者として実行する必要がないことに満足している場合は、マニフェスト命令ウィンドウを追加して、標準ユーザーとして実行する必要があります。 。

アプリケーションと同じフォルダーにマニフェストファイルを作成します。例:作成したGoldwave.exe

Goldwave.exe.manifest

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Assembly xmlns="urn:schemas-Microsoft-com:asm.v1" manifestVersion="1.0"> 
  <assemblyIdentity version="1.0.0.0"
     processorArchitecture="X86"
     name="IsUserAdmin"
     type="win32"/> 
  <description>Description of your application</description> 
  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-Microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="asInvoker"
          uiAccess="false"/>
      </requestedPrivileges>
    </security>
  </trustInfo>
</Assembly>

注:別のファイルにあるため、これはいわゆるexternalマニフェストです。アプリケーションがすでにマニフェストを持っている可能性は十分にあります。

マニフェストは、特定のバージョンのDLLへの依存関係を宣言する方法としてWindows2000で導入されました。そのマニフェストの一般的な使用法の1つは、Windows XPで、プログラムがcomctl32.dllバージョン6への依存を宣言するために使用されました。 「テーマ」でした。

アプリケーションに既に埋め込みマニフェストがある場合、Windowsはexternalマニフェストを無視します。その場合、 Resource Hacker を使用して、埋め込まれたRT_MANIFEST(リソースタイプ24)マニフェストを変更する必要があります。


次にできることは、レジストリをチェックして、誰かが既にelevateシムをプログラムに適用しているかどうかを確認することです。 Regeditをロードして確認します。

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags
    \Layers

そこには、スペースで区切られたシムを含む多数のプログラムがリストされています。

  • C:\ Program Files(x86)\ ACDSee32\ACDSee32.exe HIGHDPIAWARE
  • C:\ Program Files(x86)\ Google\Picasa3\Picasa3.exe ELEVATECREATEPROCESS
  • C:\ Program Files(x86)\ skiStunt\skiStunt\bin\skiStunt.exe WINXPSP2
  • C:\ Program Files(x86)\ Steam\Steam.exe HIGHDPIAWARE ELEVATECREATEPROCESS
  • C:\ Program Files(x86)\ SysInternals\autoruns.exe ELEVATECREATEPROCESS RUNASADMIN
  • C:\ Program Files(x86)\ Windows Live\Messenger\msnmsgr.exe VISTASP2
  • D:\ Games\Call of Duty\CoDSP.exe WINXPSP3
  • D:\ Shared\Win32app\Spy\SPYXX.EXE DISABLEDWM

プログラムがそこにないことを確認してください。同様のエントリのセット(「すべてのユーザー」のエントリ)は、次の場所にもあります。

HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\AppCompatFlags\Layers
9
Ian Boyd

アプリケーションがWindowsVista/7よりもかなり前に作成されている場合は、実行するために管理者権限が必要になる可能性があります。多くのプログラムは、インストールする人が管理者権限を持っていると想定していたため、プログラマーが最もよく考えたレジストリとファイルシステムのセクションに書き込んだだけです。

私自身の個人的な経験からこれを知っています。約10年前、私はソフトウェアを大手自動車会社に販売している会社で働いていました。すべてのPCがロックダウンされました。 「ユーザー」権限だけで実行している誰かがコードをインストールできるように、コードを変更する必要がありました。

1
ChrisF