tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルVB6の再インストール時にService Packエラーが出る
記事No16414
投稿日: 2018/02/20(Tue) 11:56
投稿者bigface
win7proとVB6sp6を使っています。

ネットから無料のVisualStudio2017 community をインストールしましたが、使いにくいのでアンインストールしました。

そしたらVB6がおかしくなりました。

mscomctl.ocxの読込エラーが起き、ファイルが開かなくなりました。

今考えれば、SP6を再インストールしてmscomctl.ocxを再登録すればよかったかもしれませんが、その時はVB6の修復をしました。
すると途中でWindowsのService Packが最新でないとダメといったフォームが出て、セットアップにチェックを入れないと先に進まないようになります。

チェックして進むとファイルは展開するのですが、最後に「現在インストールされているシステムは更新しようとしているバァージョンより新しいバァージョンです」というエラーメッセージがでてインストールできません。

それでVB6をアンインストールして、再インストールしましたが、上記と同じ現象がでて進みません。

再インストール時に気が付いたのですが、インストールの最初に「プログラム互換性アシスタント」の画面が出ませんでした。

何とかVB6をもう一度インストールしたいのですがご助言をお願いします。

[ツリー表示へ]
タイトルRe: VB6の再インストール時にService Packエラーが出る
記事No16415
投稿日: 2018/02/20(Tue) 16:58
投稿者魔界の仮面弁士
バージョンではなく、バァージョンでしたか。

その表記のエラーメッセージは見たことは無いのですが、Windows 7 に標準実装されている
VB6 のランタイムの一部は、VB6 SP6 のそれよりも後発のバージョンであることは確かです。

そのため一部のコンポーネントは、インストール時にスキップされるようになっています。

そしてさらに、Windows Update (の必須ではないオプション)によっても
ランタイムの一部は、さらに後継バージョンに更新されるようになっています。


> mscomctl.ocxの読込エラーが起き、ファイルが開かなくなりました。
UAC 関連のセキュリティ強化により、VB6.EXE のプロパティ から
[互換性] タブ → [すべてのユーザーの設定を変更] で
[管理者としてこのプログラムを実行する] にチェックを入れておかないと、
一部のコンポーネントを利用できないことがあるようです。


> 今考えれば、SP6を再インストールしてmscomctl.ocxを再登録すればよかったかもしれませんが、
アンインストール済みとのことなので今更ではありますが、手動で再登録するのであれば、
古いバージョンの mscomctl.ocx を再登録しないよう気をつけねばなりません。

また、32bit 版の ActiveX コントロールと 64bit 版のとり違いにも注意しましょう。
32bit 版の Windows なら C:\Windows\System32\regsvr32.exe を使い、
64bit 版の Windows なら C:\Windows\SysWow64\regsvr32.exe を使って
アンレジスト(/u オプション) および再レジストを実施します。

regsvr32 /u C:\Windows\System32\MSCOMCTL.OCX
regsvr32 C:\Windows\System32\MSCOMCTL.OCX

なお、MSComCtl.dep によれば、MSComCtl.ocx Version 6.1.98.34 には
ComCat.dll と MSCmCJP.dll も必要になるようです。


このほか、regtlib.exe を用いてみるという意見もあるようです。
https://qiita.com/Q11Q/items/e546e3077e2b329870e3



> それでVB6をアンインストールして、再インストールしましたが、上記と同じ現象がでて進みません。
「システムの復元」に、VS2017 インストール前の状態の復元ポイントは残っていないでしょうか?


> インストールの最初に「プログラム互換性アシスタント」の画面が出ませんでした。

プログラム互換性アシスタントの対象であったかどうかは把握していないのですが、
もしも前回導入時に表示されていたのだとしたら、その時に、左下の
「今後、このメッセージを表示しない」オプションにチェックを付けたりはしませんでしたか?

それと、VB.NET 2002〜VB2015 までは、
 C:\Program Files (x86)\Microsoft Visual Studio .NET\
 C:\Program Files (x86)\Microsoft Visual Studio .NET 2003\
 C:\Program Files (x86)\Microsoft Visual Studio 8\
 C:\Program Files (x86)\Microsoft Visual Studio 9.0\
 C:\Program Files (x86)\Microsoft Visual Studio 10.0\
 C:\Program Files (x86)\Microsoft Visual Studio 11.0\
 C:\Program Files (x86)\Microsoft Visual Studio 12.0\
 C:\Program Files (x86)\Microsoft Visual Studio 14.0\
というファイルパスだったものが、VB2017 になって
 C:\Program Files (x86)\Microsoft Visual Studio\2017\
に変更されたという経緯があります。

しかしながら、Visual Studio 6.0 の既定のフォルダーは
 C:\Program Files (x86)\Microsoft Visual Studio\
ですので、インストール先パスが被ってしまいます。

今回、2017 と 6 の両方をアンインストールしたことで、
"Microsoft Visual Studio" のフォルダーが完全に消えているのならば
良いのですが、もしもフォルダーが残存しているのであれば、
VB6 インストールの途中でカスタムインストールを指定し、
それ以外のインストール先、たとえば
 C:\Program Files (x86)\Microsoft Visual Studio 6.0\
などにしておいたが方が良いかもしれません。

[ツリー表示へ]
タイトルRe^2: VB6の再インストール時にService Packエラーが出る
記事No16416
投稿日: 2018/02/21(Wed) 09:31
投稿者bigface
魔界の仮面弁士 様
回答ありがとうございます。

システムの復元を試みたのですが、なぜか2017インストール以前の古い履歴が有りませんでした。

アンインストール後も「Microsoft Visual Studio」のフォルダは残っていましたので、一旦名前を「Microsoft Visual Studio2」に変更してインストールして見ましたが同じでした。

「今後、このメッセージを表示しない」オプションにチェックについてはあまり必要がないので入れてないと思いますが確かではありません。

隣のパソコンにもVB6がインストールされているのですが、これもmscomctl.ocxの読込エラーが起きていたので再インストールしました。

その時に「プログラム互換性アシスタント」の画面が出てインストールが進み、最後までWindowsのService Packの画面は出ず、インストールは成功しました。

なぜ、こっちのパソコンだけWindowsのService Packの画面が出るのかがわかりません。

インストール時のセットアップウィザードは
 readme表示の画面→使用許諾契約書同意の画面→プロダクトID→WindowsのService Packの画面→ファイル展開→Service Packエラー

このような流れです。
WindowsのService Packの画面さえ出なければうまくいくような気がしますが・・・

[ツリー表示へ]
タイトルRe^3: VB6の再インストール時にService Packエラーが出る
記事No16417
投稿日: 2018/02/21(Wed) 11:36
投稿者bigface
その後変更がありました。

システムの復元で一番古い復元点に戻したところ、VB6のアンインストール前に戻りました。

そこでVB6のsp6を管理人権限でインストールすると「dispex.dll」「mshflxgd.ocx」が登録されませんでした というメッセージが出てセットアップは成功しませんでした。

管理人権限でコマンドプロンプトから手動で登録しても「モジュール"dispex.dll"は読み込まれましたが、DllregisterServerへの呼出はエラー0x80070005により失敗しました」となります。

「mshflxgd.ocx」も同様です。

ネットで調べるとこのエラーは管理人権限でない場合に出るそうなのですが、そのようにしているのになぜでしょう?

[ツリー表示へ]
タイトルRe^4: VB6の再インストール時にService Packエラーが出る
記事No16418
投稿日: 2018/02/21(Wed) 12:35
投稿者魔界の仮面弁士
依存情報の問題というのは、原因が多岐に渡りますので、
調査工数を考えると、Windows 10 を再インストールするか、
Hyper-V 上に開発用環境を立てる方が良いと思います。


> 「dispex.dll」「mshflxgd.ocx」が登録されませんでした
dispex.dll というファイルは初めて見ました。
名前から想像すると、VBScript などで利用される
IDispathEx インターフェイスを提供するためのライブラリですかね…?


> なぜ、こっちのパソコンだけWindowsのService Packの画面が出るのかがわかりません。
依存ファイルの欠損、またはバージョン番号の組み合わせが不正だったことから、
Windows コンポーネントの修復セットアップが自動的に呼び出されたものの、
記録されていたパスに、Service Pack のインストールイメージが残っていなかったため、
修復に失敗した…といったところではないでしょうか。想像ですが。

[ツリー表示へ]
タイトルRe^5: VB6の再インストール時にService Packエラーが出る
記事No16419
投稿日: 2018/02/22(Thu) 12:13
投稿者bigface
「dispex.dll」「mshflxgd.ocx」を何とか手動で登録できないものでしょうか?

mscomctl.ocxは登録できるのですが、VB6を起動してコンポーネントの登録をすると「"を読み込めません」とエラーが出ます。

SP6のセットアップが不完全だからですね。

[ツリー表示へ]
タイトルRe^6: VB6の再インストール時にService Packエラーが出る
記事No16420
投稿日: 2018/02/22(Thu) 19:05
投稿者魔界の仮面弁士
Windows 2000 以降では Windows File Protection が導入されているため、
システムコンポーネントの手動差し替えは行うべきではありません。
https://support.microsoft.com/ja-jp/help/222193/

ファイルによっては、差し替えても自動的に復元してしまうことがあります。


> 「dispex.dll」「mshflxgd.ocx」が登録されませんでした
上記のエラーメッセージは、一字一句違わず、正確な内容なのでしょうか?

両方のファイルを記載したメッセージが 1 回だけ表示されたのか、それとも
実際には、2 つ以上のエラーメッセージが表示されていたのかが気になります。


> SP6のセットアップが不完全だからですね。
より新しいバージョンの DLL が入っていれば、そのファイルの更新処理はスキップされるとは
思いますが、もしもその DLL の依存ファイルが古いものになっていた場合には、
インストールに失敗する可能性があるかもしれません。

とはいえ、それぞれの依存関係やレジストリ情報の差異を追跡するのは非常に難しいです。
主要ランタイムである MSVBVM60.DLL だけでも、これだけのバージョンがあるわけですし…。
http://hanatyan.sakura.ne.jp/yybbs/read.cgi?no=38

長引くようであれば、やはり OS ごとクリーンインストールすることを検討してみてください。
お役に立てなくて済みません。



> 「dispex.dll」「mshflxgd.ocx」を何とか手動で登録できないものでしょうか?

できたとしても、その行為はお奨めしません。


手元の環境で dispex.dll セキュリティ設定を確認してみたところ、
たとえ [Administrators] グループや [SYSTEM] ユーザーであったとしても、
このファイルは読み取りと実行しか許可されていないようです。

このファイルを差し替える権限を既定で有しているのは [TrustedInstaller] だけでしたので、
やはりインストーラー以外での差し替えは想定されていないように見えます。
手動での差し替えは避けるべきでしょう。
hhttps://freesoft.tvbok.com/windows7/general/trustedinstaller.html


問題は、何故インストーラーが失敗したのかですが…今のところ原因は不明です。

dispex.dll は確かにランタイムの一部として提供されていますが、
Windows 2000 あたりからは、OS に最初から含まれているでしょうから、
インストール対象のファイルにはならない気がするのですけれども。


一方 MShflxgd.ocx の方は、どうやらシステムコンポーネントからは外れているらしく、
権限上は、管理者であれば差し替えられそうに見えます。とはいえ、このファイルにも
依存ファイル(MSHFGJPN.dllとか)があるわけなので、仮に、ファイルやレジストリを
手動で上書きできるのだとしても、バージョン番号を考慮せずに手動配置するのは
避けたほうが良いと思いますよ。

[ツリー表示へ]
タイトルRe^7: VB6の再インストール時にService Packエラーが出る
記事No16421
投稿日: 2018/02/23(Fri) 11:20
投稿者bigface
ありがとうございました。

OSを再インストールしたいのですが、会社のPCで前任者とシステムを管理していた人間が退社したので、セットアップディスクがどこにあるのかわかりません。

これ以上時間をかけて使い物にならなくなるよりも、別のPCを使うことにします。

お手数かけて申し訳ありませんでした。

また機会がありましたら、ご指導よろしくお願いいたします。

[ツリー表示へ]
タイトルRe^8: VB6の再インストール時にService Packエラーが出る【解決】
記事No16422
投稿日: 2018/02/23(Fri) 11:37
投稿者bigface
VB6が最終的に復元できませんでしたが、隣のVB6のはいったPCにSP6を入れたところ大丈夫でしたので、これと交換することにしました。

データや設定を移行中です。

これにて解決とさせていただきます。

魔界の仮面弁士様、ありがとうございました。

[ツリー表示へ]