Windows Vista/Windows 7より前に作成されたアプリケーションを使用しています。Windowsは、アプリケーションを管理者として実行する必要があると判断しました(つまり、シールドアイコンがあります)。アプリケーションのマニフェストには、昇格された特権で実行する必要があることを示すものは何もないと確信しています(Windows Vistaより前に作成された方法です)。
特定のアプリケーションが昇格された特権を必要としないことをWindowsに伝える方法はありますか?
Windowsは、さまざまな基準に基づいてアプリケーションを自動的に昇格させます( Windows Vistaでのユーザーアカウント制御の理解と構成 にリストされています):
32ビットプロセスが作成される前に、次の属性がチェックされ、それがインストーラーであるかどうかが判断されます。
- ファイル名には、「インストール」、「セットアップ」、「アップデート」などのキーワードが含まれています。
- 次のバージョン管理リソースフィールドのキーワード:ベンダー、会社名、製品名、ファイルの説明、元のファイル名、内部名、およびエクスポート名。
- 実行可能ファイルに埋め込まれたサイドバイサイドマニフェストのキーワード。
- 実行可能ファイルにリンクされている特定のStringTableエントリのキーワード。
- 実行可能ファイルにリンクされているRCデータの主要な属性。
- 実行可能ファイル内のターゲットバイトシーケンス。
ファイルの名前を変更しても昇格を防ぐことができない場合は、 昇格を防ぐマニフェストを作成する ができるはずです。
プログラムが適切に記述されていて、標準ユーザーとして実行すると実際に動作すると仮定すると、標準ユーザーとして実行するように明示できます。
注:プログラムが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
そこには、スペースで区切られたシムを含む多数のプログラムがリストされています。
HIGHDPIAWARE
ELEVATECREATEPROCESS
WINXPSP2
HIGHDPIAWARE ELEVATECREATEPROCESS
ELEVATECREATEPROCESS RUNASADMIN
VISTASP2
WINXPSP3
DISABLEDWM
プログラムがそこにないことを確認してください。同様のエントリのセット(「すべてのユーザー」のエントリ)は、次の場所にもあります。
HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\AppCompatFlags\Layers
アプリケーションがWindowsVista/7よりもかなり前に作成されている場合は、実行するために管理者権限が必要になる可能性があります。多くのプログラムは、インストールする人が管理者権限を持っていると想定していたため、プログラマーが最もよく考えたレジストリとファイルシステムのセクションに書き込んだだけです。
私自身の個人的な経験からこれを知っています。約10年前、私はソフトウェアを大手自動車会社に販売している会社で働いていました。すべてのPCがロックダウンされました。 「ユーザー」権限だけで実行している誰かがコードをインストールできるように、コードを変更する必要がありました。