2018年5月8日火曜日

Windows XPで動作していたアプリがWindows 7やWindows 10で動作しない

Windows XPで動作していた市販パッケージをWindows 7やWindows 10にインストールした際、設定ファイルが読み込まれなくて困った。何とか解決できたのでここに記す。

 市販パッケージのHogeをWindows XP SP3で使用していた。このご時世なので取り敢えずWindows 7で動作させようと思い、Windows 7のPCにインストールをしてみた。インストール先はC:\Program Files (x86)\Hoge\

 Hogeはプログラムのインストール先フォルダー内に存在するStockEnv.iniを実行環境ファイルとして読み込み動作する。7のPCにHogeをインストールし、XPのPCからStockEnv.iniを7のPCのプログラムのインストール先フォルダー内に上書きコピーしてセットアップ完了。早速Hogeを起動してみる。StockEnv.iniに指定したDBにアクセスされずデータが0件と表示されてしまう。もう一度StockEnv.iniファイルを確認すると指定のフォルダー内に存在しているし、ファイルの内容を確認してみたが問題ない。再度Hogeを起動してみる。やはり先程と同じ。因みに、ログインユーザーは標準ユーザー。

 試しに管理者として実行してみると、正常に動作する。権限が標準ユーザーだとダメ。何故だ??

 この後、C:\Program Files (x86)\Hoge\のアクセス権を標準ユーザーに対してフルアクセスにしたり、プログラムをXP(SP3)互換にしたり、プログラムを再インストールしたが変化無し。何故だ??

 ここで飛び出すのがSysinternalsSuiteのProcmon.exe。Hogeを起動しProcmon.exeでHogeがアクセスしているファイルを確認。すると、C:\Program Files (x86)\Hoge\StockEnv.iniにアクセスするが、その直後にC:\Users\xxxxxxxx\AppData\Local\VirtualStore\Program Files (x86)\Hoge\StockEnv.iniにアクセスし、そのファイルを変更している。インストール先フォルダー内のStockEnv.iniではなく、ローカル・セッティングフォルダー内に作成されたStockEnv.iniをアクセスしていたのか。だから、こちらが設定した内容でプログラムが起動してくれなかったのか。納得。

 そういえば、セキュリティ強化のため、Windows VistaからProgram Filesのアクセス権が厳格化されていたっけ。管理者の場合は問題なく動作したが、標準ユーザーの権限ではProgram Filesフォルダーにファイルを作成できず、それでローカル・セッティングフォルダー内にファイルが作成されていたのか。

 XPで動作していたアプリが7や10で期待通りに動作しないときはこの辺に原因があるかも。