VB6製のアプリケーションがあります。(exe形式にて)
これを下記2通りの組み合わせで連続運転して動作テストをしています。
●マシンA(3年ほど前の古いPC)
OS:WindowsXP Home(SP2)
開発機なので、インターネットWindowsUpdateで常に最新を保つように設定済み
●マシンB(結構新しいPC)
OS:WindowsXP Pro(SP2)
客先への納入機で、インターネットには接続されてなく、最新を保っていない
マシンAでは連続動作させても問題なく動作するのですが、マシンBではアプリケーションエラー後に、Stopエラー(ブルーバック)で停止してしまいます。
イベントビューアーのアプリケーションログで"USER32.DLL"で問題が発生しているという事です。
ちなみに、直接APIなどでUSER32.DLLは使用していないです。
両者のDLLバージョンをみると・・・
●マシンA: 5.1.2600.3099
●マシンB: 5.1.2600.2180
・・・となっており、マシンAの方が新しいです。
DLLのバージョンの違いは、WindowsUpdate等で変わってくるものだと思いますが、最新にしてみた方が良いのでしょうか?
また、USER32.DLLだけを手動で置き換える事は可能で、しかも安全でしょうか?
ここで確認するのはおかしいかもしれませんが、よろしくおねがいいたします。
【補足】
念のためですが、VB6製のアプリは、1秒の周期でデータファイルにアクセスし、更新があれば読み込みを行い、トレンド表示するソフトです。
ファイルの読み込みにはAPIのCreateFileやSetpointer,ReadFileを使用しており、描画関係にはBitbltを利用しております。
>USER32.DLLだけを手動で置き換える事は可能で、しかも安全でしょうか?
理論上は書換え可能ですが、安全かはいいきれません。
USER32.DLL 5.1.2600.3099↓で更新されている
GDI の脆弱性により、リモートでコードが実行される
http://www.microsoft.com/japan/technet/security/bulletin/ms07-017.mspx
> Stopエラー(ブルーバック)で停止してしまいます。
Blue Screen に表示されるエラーコードを確認してください。
そこから、何か情報が得られる場合があります。
http://mtbeta.msdn.microsoft.com/ja-jp/library/ms789516.aspx?altlang=ja-jp
http://support.microsoft.com/kb/325011
http://oca.microsoft.com/
http://www.microsoft.com/technet/archive/winntas/tips/techrep/bsod.mspx?mfr=true
原因追求よりも、問題の解決を優先するのであれば、OSから
クリーンインストールされた方が早道かと。
> DLLのバージョンの違いは、WindowsUpdate等で変わってくるものだと思いますが、最新にしてみた方が良いのでしょうか?
基本的には、常に最新にしておくべきかと思います。
もちろん動作検証は必要ですけれども。
> また、USER32.DLLだけを手動で置き換える事は可能で、しかも安全でしょうか?
Windows File Protection の保護対象になっていますので、
単純にファイルを置き換えれば良いというわけでもありません。
http://ruffnex.oc.to/kenji/text/wfp/
皆様コメントありがとうございます。
該当パソコンは一部先行して客先に納入済みで、社内に残っているPCで、改造したソフトウェアの動作検証をしているところです。
できれば、全PCの状態を同じで運用したかったのですが、仕方ないので、ネットに接続してWindowsUpdateしました。その環境で、再検証しているところです。
単純にDLLのリプレースはできないのですね。
>魔界の仮面弁士さん
そのPCはVBのランタイムモジュールなどがインストールされただけで、ほとんどクリーンなんですよ。
それでも、VBのランタイム関連がおかしいって事も考えれるので、最終的にはそうしてみようかと思ってます。
また、次にエラーが出たら、エラーのコードを控えて調査してみます。
今回は、あわててしまい、忘れておりましたが、Videoカードやメモリを更新した云々と横文字が出てましたけど。
そんな時にあわててはいけませんね。エンジニアの端くれとして。。。
解決フラグ忘れておりました。
編集 削除