Windows10のVirtual storeが原因で印刷結果にテンプレートファイルの更新内容が反映されない場合の対処方法
ブラザーのb-pacを使ったプログラムからテンプレートファイル(拡張子がlblのファイル)を何度直しても反映されなかったトラブルの対処した事が発端です。
結論的にはWindows10のVirtual storeが原因でした。
他にも同じ現象が起きている方への助けになれば、と言う事でまとめました。
現象:テンプレートの修正結果が反映されない
この現象はInternet Explorerからb-pac経由でlbl形式のテンプレートファイルで印刷する、というWebアプリの動作テスト中に起きました。
印刷位置のずれ等があったのでテンプレートファイルを修正して印刷したのですが、修正した内容がまったく反映されません。
ちなみにテンプレートファイルはCドライブの直下です。windows10ではあり得ない場所ですね。でも元々WindowsIXP時代のプログラムなので、こういう設定をしていた訳です。
さておき、何度修正してもテンプレートファイルと異なる印刷結果ばかりで、修正する前の元々の内容で印刷される、という現象が起きていました。
反映されない原因
あまりに印刷結果が異なるので「別の場所にファイルをコピーしてそれを元に印刷しているのではないか」という考えに至り、テンプレートファイルの名前でCドライブ全体でファイル検索してみました。
するとテンプレートファイルが自分で保存していない以下の場所にもあるとの検索結果が。
C:\Users\[ユーザー名]\AppData\Local\VirtualStore
この場所にファイルを保存した記憶もなければプログラムの動作にも関係ないはずなので削除した所、修正した内容で印刷される様になりました。
こんな事が起きた原因がテンプレートファイルがCドライブ直下に保存されていた事と、使っていたSDKがXPまでの対応だった事の両方が影響していた様です。
というのもWindowsXPまでのプログラムをWindows10で動かす場合、互換性対策として「Virtual store」と言う仕組みが用意されています。
この「Virtual store」という仕組みは今回の様に意図せぬ動作をする様で、調べてみたら同じ様な現象に合ってる方が結構いらっしゃる様でした。
という事で対処と原因は分かったものの、この「Virtual store」について少しまとめてみます。
トラブルの原因:Virtual store とは
Virtual storeについて調べてみたら同じ様な現象に合われた記事を発見。
……結論から言うと、犯人はWindows Vista以降で導入されたVirtualStoreという仕組みでした。
[Windows 7のVirtualStoreに泣かされた – outsider reflex]
Windows Vista以降ではファイルに対して書き込みができない時に、「書き込めませんでした」というエラーを出す代わりに「C:\Users\ユーザ名\AppData\Local\VirtualStore」っていうフォルダの中にファイルを書き出すアプリケーションがあるみたいなんですね。
私の体験した動作もこちらで説明されている通りの状態でした。
安全重視なんでしょうが、なんだか不便な仕様です。Vistaで厳しくしすぎた弊害かも。
以降のWindowsはこういった「開発側が良かれと思ってやった事がユーザー側では余計なお世話」って仕組みが増えた気がします。
そして結果ドツボにはまることも増えてますのでどうにかして欲しいですね。
Virtual storeを無効にする方法
このVirtual storeも無効にできる様です。
標準では有効になっているはずの設定なので、変える事で問題が出るかもしれませんのでその点ご留意ください。
またローカルセキュリティポリシーから設定するので、Windows10 homeでは設定できない点もご注意ください。
設定方法
ローカルセキュリティポリシーはメニューの「Windows管理ツール」内の一番下に表示されています。
左下のアイコンからメニューを表示し、「Windows管理ツール」-「ローカルセキュリティポリシー」をクリックします。
起動したら「セキュリティの設定」→「ローカル ポリシー」→「セキュリティ オプション」→「ユーザー アカウント制御:各ユーザの場所へのファイルまたはレジストリの書き込みエラーを仮想化する」をダブルクリックします。
プロパティが表示されたら「有効」から「無効」に変更しOKボタンをクリックすれば設定完了です。
おわりに
この仕組み、元々は安全性対策だと思います。
「ユーザーにより変更される可能性があるファイルはProgram Files等のシステム的に大事な場所へ保存しないでください」ってWindows XP以降で変更された事で登場した仕組みなんですよね。
XP位までは大事な場所にあるファイルもプログラムが自由に修正できたので、ウイルスによる被害が大事になったのでこういう事をする必要が出てきました。
セキュリティの面からもお行儀良く作り直すのが正しいアプローチなんだと思います。
とりあえずお仕事で使っているのはいわゆる行儀の悪いプログラムなのでテスト時はこの機能をオフにしました。
ですが紆余曲折あり新しく対応する事になったので、やっぱり時代に合わせてかないとなーと思う次第です。
ディスカッション
コメント一覧
まだ、コメントがありません