強制的に Windows NT 6.x で管理者として実行されるファイル
Windows Vista や Windows 7 にコピーすると、なぜか勝手に盾のマークがついて強制的に管理者として実行されてしまうファイルがあります。
ユーザー アカウント制御 (UAC: User Account Control) - Windows 7 対応アプリケーションの互換性
そこで Windows Vista や Windows 7 では、経験則に基づき特定のパターンに合致するプログラムを、インストーラーとして検出する機能が追加されています。インストーラーとして検出されると、 自動的に権限昇格ダイアログが表示され、管理者権限で実行することができます。たとえば、ファイル名やバージョン情報に「setup」、 「update」、「install」という文字列が含まれている場合、Windows Vista や Windows 7 はアプリケーションの実行時にインストラーとみなし、実行には昇格が必要であると認識します。 |
実はこれ、マニフェストで特に指定されていない場合、アプリの互換レイヤー定義 %SystemRoot%\AppPatch\sysmain.sdb で、ファイル名に以下の文字列が含まれていると管理者として強制的に実行されてしまうのです。
uninst setup instal patch update |
管理者として実行したくない場合(管理者として実行されると、ユーザープロファイルフォルダ(%userprofile%) をベースにインストールされたり、ファイル参照される)や、管理者権限がないユーザがファイルを使いたい場合に困るケースがあります。
この場合の対策としては、
・リソース情報やファイル名に上記の文字列を含めない
・マニフェストでユーザー権限で実行しないことを宣言する。
という方法があります。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2"> <ms_asmv2:security> <ms_asmv2:requestedPrivileges> <ms_asmv2:requestedExecutionLevel level="asInvoker" uiAccess="false" /> </ms_asmv2:requestedPrivileges> </ms_asmv2:security> </ms_asmv2:trustInfo> </assembly> |
文字列がリソースに埋め込まれてる場合、リソースエディタで変更するか、マニフェストに上記のXMLを埋め込むのが有効です。
Comments