<< バックアップと復元 | requestedExecutionLevelのuiAccess >>

ファイルの関連付け

どうしてもXPモードだと、アプリの起動だけでなく実行速度も落ちてしまいます。
CPUも1個しか割り当てられませんから。

で、できるだけWin7上にアプリをインストールするわけですが、
「管理者で実行」 (高IL)しないとまともに動作しないアプリもあります。
(※IL: Integrity Level)

この場合の欠点は、

(1) ドラッグ&ドロップが効かない。
(2) ファイルの関連付けをしても標準権限(中IL)でしか起動できないアプリがある。


(1)は、エクスプローラーが標準権限(中IL)で動作しているので
中ILから高ILへの通信はUIPIによって制限されるからです。
結果としてドラッグ&ドロップは無視されます。

(2)の場合「管理者で実行」しないと起動できないようなアプリだと、
標準権限で起動してエラー終了します。

(2)は、関連付けられたプログラムを管理者権限で動作させることができれば
エクスプローラから関連ファイルをダブルクリックして起動させることができます。

単独でアプリを動かす際は、管理者として起動を選ぶか、
ショートカットなら、プロパティ→詳細設定で「管理者として実行」にチェックを入れれば事足りますが、
ファイルの関連付けからの起動には、このような設定が見当たりません。
(どこかにレジストリ設定でもあれば良いのですが...)

シールドアイコンが付いているようなアプリであれば、常に管理者として起動できます。(シールドアイコン:アイコンの右下に黄色と青の楯が付いたもの。例えばコンピュータ→右クリックの管理。)
shield.jpg
自分で作ったものでもない一般のアプリをシールドアイコン付きにすることができれば、ひとつの解決策となります。

----------

ここから先は、全てのアプリで試した訳ではなく、動作を保障するものではありません。また、アプリケーションのライセンスによっては、違反行為とみなされる場合もありますのでご注意ください。

前提として、MT.exe (Manifest Tool) が必要になります。
(VS2005やVS2008の製品版には付いています。VS2008のExpress版にも入っているようです。)

最初にコマンドプロンプトで

"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\vsvars32.bat"

を行うとMTのパスを入れなくて済みます。

----------

今回の問題が発生するようなアプリには、
マニフェストファイルは添付されていないと思います。
まず、該当アプリケーションのマニフェストを作ります。

mt.exe -inputresource:target.exe;#1 -out:target.manifest

次にtarget.manifestを編集します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>

が必要な部分です。

trustInfoがなければ、trustInfoをそのまま追加します。
リソース自体がない場合は、そのまま追加します。

大事なところは、requestedExecutionLevel level="requireAdministrator"
です。

書き換えたマニフェストでtarget.exeのリソースを書き換えます。

mt.exe -manifest target.manifest -outputresource:target.exe;#1

#1 はリソースIDですが、通常は1です。
複数のリソースを持つものもあります。
(PE Explorerを使うとより詳しく調べられます。)

mt.exeで失敗しなければ、シールドアイコン付きのアプリに変わります。

実際に作業される場合は、Program Filesの下ではなく、
別のユーザーフォルダにコピーして作業してください。
変換後、Program Filesの下のオリジナルの.exeをrenameして、
変換した.exeファイルをコピーしてください。


MTさえ持っていれば大した作業ではありません。
ドラッグ&ドロップは無理ですが、
ファイルの関連付けの問題が解消できるケースもあります。

----------
【追記】
Openソース系でwin32バイナリを拾ったものは、プログラム内にダイジェスト値を持っているものが多く、こういうアプリは書きかえるとエラー終了します。Openソース系は自分でBuildするしかないです。




Tags: Manifest Windows7(x64)
author : HUNDREDSOFT | - | -