Pages

自己紹介

某IT技術情報誌に連載記事を持っていたテクニカルライター。またもや休刊してしまったよ。
Copyright © 2011-2016 Daregada. All rights reserved. Powered by Blogger.

秀丸(32ビット版)に外部マニフェストを用意してファイル仮想化の対象外にする方法

2011-02-22

32ビット版の秀丸は、後方互換性の確保のために意図的にファイル仮想化の対象になっている。設定ファイルやマクロファイルの保存先を正しく設定しているのであれば、リソースの改変と外部マニフェストの組み合わせでファイル仮想化の対象外にできるよ、という話。

Abstract

理由
ファイル仮想化が必要な理由とされる設定ファイルやマクロファイルの保存先を変更しているパワーユーザーにとっては、ファイル仮想化は余計なお世話であるから。
対策
以下の作業を順番に行なう
  1. 秀丸本体(hidemaru.exe)のリソースから埋め込みマニフェストを除去
  2. 埋め込みマニフェストと同じ内容に実行権限要求を追加した外部マニフェストを作成
  3. 秀丸本体と同じフォルダーに外部マニフェストを配置
リソース部分とはいえ秀丸のバイナリを直接改変するので、上の説明でピンとこない人は作業しないように。また、この作業の結果発生したいかなる損害についても筆者は対応しない。

理由

32ビット版の秀丸は、Windows Vista以降に対応しているにもかかわらず、意図的にファイル仮想化の対象アプリとなっている(64ビット版秀丸は対象外)。その理由は、旧いバージョンの秀丸で、設定ファイルやマクロファイルをインストール先フォルダーに配置していたためだ。現在の秀丸においても、旧いバージョンの設定をそのまま引き継いでいる場合には、これらのファイルがインストール先フォルダーに置かれている。これらのファイルを(一般ユーザー権限で動作する)秀丸で書き込めるように、ファイル仮想化(詳細は「Windows Vista/7のファイル仮想化によりデータファイルが多重化される問題#解説」を参照)に頼る必要がある。

なお、現在の32ビット版秀丸をクリーンインストールすると、設定ファイルやマクロファイルは、Windows Vista以降で推奨されるユーザーごとのフォルダー("C:\Users\ユーザー名\AppData\Roaming\Hidemaruo\Hidemaru\Macro"など)に配置される設定になる。旧いバージョンの設定を引き継いで使っている場合でも、秀丸のヘルプで推奨されているように、設定ファイルやマクロファイルを別のフォルダー(ユーザーが好きなように決められる)に配置する設定を行なえば、ファイル仮想化に頼る必要はなくなる。

秀丸自身がファイル仮想化に頼る必要がないのであれば、秀丸をファイル仮想化の対象外として動作させたいという欲求が出てくる。ファイル仮想化の対象外なら、他のアプリの設定ファイルを秀丸で編集する際、互換性ファイルとして保存される問題が生じないからだ。書き込み権限がないファイルについては、秀丸で開く時点で"このファイルを書き込み許可で開くことができませんでした"(以下略)と注意が促され、読み込み専用で開くといった選択を行なえるようになる。

一般ユーザー権限で動作する32ビットアプリをファイル仮想化の対象外とするには、マニフェストで実行権限要求(requestedExecutionLevel)を行なえばいい。しかし、実行権限要求を記述した32ビット版秀丸用の外部マニフェスト(hidemaru.exe.manifest)を作成し、秀丸本体(hidemaru.exe)と同じフォルダーに配置しても、依然として秀丸はファイル仮想化の対象のままである。

なぜなら、32ビット版の秀丸本体には、実行権限要求を含まない埋め込みマニフェストがリソースとして含まれており、埋め込みマニフェストが外部マニフェストより優先されるからだ。Windows Vista以降では埋め込みマニフェストが優先なので、外部マニフェストの実行権限要求は無視されてしまう。

対策

対策としては、「秀丸本体から埋め込みマニフェストを除去」し、「埋め込みマニフェストの内容に実行権限要求を追加した外部マニフェストを作成」して、「秀丸本体と同じフォルダーに外部マニフェストを配置」する。

リソース部分とはいえ秀丸のバイナリを直接改変するので、上の説明でピンとこない人は作業しないように。また、この作業の結果発生したいかなる損害についても筆者は対応しない

また、この改変を行なった後は、"C:\Program Files\Hidemaru"に置かれた設定ファイルやマクロファイルを(一般ユーザー権限の)秀丸で書き換えることはできなくなるので、あらかじめこれらのファイルの置き場所を変更してから作業すること。

  1. 実行ファイルのリソースを直接編集できるリソースエディター(XN Resource Editorなど)を用意する
  2. 秀丸本体(hidemaru.exe)を適当な作業用フォルダーにコピーする
  3. リソースエディターを実行し、作業用フォルダーにある秀丸本体(hidemaru.exe)を開く
  4. リソースの中から埋め込みマニフェストを見つける。XN Resource Editorの場合は、"XP Theme Manifest"→"1"→"日本語(日本)"だ。
  5. 埋め込みマニフェストの内容(XMLテキスト)を、すべてコピーし、適当なテキストエディター(秀丸でもOK)に貼り付ける。
  6. テキストエディターで、最後の行("</assembly>")の直前に、以下の内容(一般ユーザー権限の実行権限要求)を追加する
  7. テキストエディターで作成した外部マニフェストを、作業用フォルダーに"hidemaru.exe.manifest"というファイル名で保存する(エンコーディングはUTF-8)
  8. リソースエディターに戻り、埋め込みマニフェストをリソースから削除する。XN Resource Editorの場合は、左側のツリーで"日本語(日本)"を右クリックし、"Delete Resource"を選択すればいい
  9. リソースエディターで、リソースを改変した秀丸本体を作業用フォルダーに上書き保存する

これで改変作業は完了だ。続いて、秀丸のインストール先フォルダーにファイルをコピーする

  1. 秀丸のウィンドウをすべて閉じる。さらに、秀丸の常駐機能を使っているのであれば、右下の常駐秀丸アイコンを右クリックして"常駐秀丸エディタの終了"を選択する
  2. エクスプローラーで秀丸のインストール先フォルダーを開いて、(改変していない)秀丸本体(hidemaru.exe)を、別の名前(hidemaru.orig.exeなど)に変更する

    ※リソースを改変した秀丸本体の名前を変更して使うことはできない。というのも、秀丸が自分自身を子プロセスとして実行する際のファイル名が"hidemaru.exe"に固定されているためだ

  3. 作業用フォルダーから、リソースを改変した秀丸本体(hidemaru.exe)と、外部マニフェスト(hidemaru.exe.manifest)をコピーし、秀丸のインストール先フォルダーに貼り付ける。途中で管理者のアクセス許可が必要を求められるので、"続行"ボタンを押す(Windows Vistaでは昇格ダイアログも表示される)
  4. 秀丸を起動し、ファイル仮想化の対象となっているデータファイルを開いてみる。秀丸のインストール先を変更していないのであれば、さきほどコピーした外部マニフェストを開けばいい。内容が表示される前に、"このファイルを書き込み許可で開くことができませんでした"(以下略)と注意が促されれば、秀丸はファイル仮想化の対象外となっている。

0 件のコメント:

コメントを投稿