Windows Updateがインストールされたセキュリティアップデート KB268732 の後、VB6プロジェクトのロードに失敗します。表示されるエラーメッセージは、「 '[project_vbp_path] /MSCOMCTL.OCX'をロードできませんでした-プロジェクトのロードを続行しますか?」です。メッセージのパスは、コントロールの登録済みパスではなくvbpファイルフォルダーのパスであることに注意してください。
詳細:
セキュリティ更新プログラムの説明には、MSCOMCTL.OCXに新しい修正バージョンがあることが記載されています。そこで、「ActiveXコントロールのアップグレード」チェックボックスのプロジェクトプロパティをチェックしました。両方の方法で試しました。チェックマークが付いているか、チェックマークが付いていないかがわかりません。 VB6 IDEは、アップグレードされたOCXのロードを拒否しました。
数時間の努力、システムの復元、登録、登録解除のサイクル、そして夜の睡眠の後、問題を特定することに成功しました。プロジェクトファイルには次の行が含まれていることがわかります。
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX
バージョン情報「2.0」はロードしていない理由だったようです。メモ帳で「2.1」に変更すると、問題が解決しました。
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.1#0; MSCOMCTL.OCX
そのため、同様の「OCXをロードできませんでした」状況では、解決方法の1つとして、新しいプロジェクトを開始する方法があります。フォームの1つにコントロールを配置し、メモ帳でvbpファイルをチェックして、期待されるバージョンを確認します。
または非常に簡単な方法:
(以下のボブの貴重なコメントの後にこのセクションを追加しました)
VBPプロジェクトファイルをメモ帳で開き、VB6がプロジェクトを自動的に2.1にアップグレードして削除するのを妨げている厄介な行を見つけることができます。
NoControlUpgrade=1
この問題は、昇格したコマンドプロンプトで次を実行することで解決されました。
コマンド:
cd C:\Windows\System32\
regtlib msdatsrc.tlb
または
cd C:\Windows\SysWOW64\
regtlib msdatsrc.tlb
これがお役に立てば幸いです。
問題:
Microsoft Office 2010(またはそれ以降)製品は、MSCOMCTL.ocxとCOMCTL32.ocxの互換性を壊す更新をインストールします。残念ながら、これはVisual Basic 6 SP6やOracle Virtual Box v5などの他の多くのプログラムに影響します。実際の問題は、HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0
レジストリキーです。この問題に関する詳細な背景情報を見つけることができます こちら 。
別の有効なソリューションは次のとおりです:
ソリューションは、Officeパッチファイルの登録を解除せずにMSCOMCTL.ocxとCOMCTL32.ocxを削除、置換、再登録することにより、レジストリが破損していないことを前提としています。
fix.cmdというバッチファイルを作成し、次のコマンドをその中に配置します。
regsvr32 /s /u %windir%\SysWOW64\comctl32.ocx
regsvr32 /s /u %windir%\SysWOW64\mscomctl.ocx
del /y %windir%\SysWOW64\comctl32.ocx
del /y %windir%\SysWOW64\mscomctl.ocx
msiexec /passive /norestart /i KB2708437.msi
msiexec /passive /a KB2708437.msi
regtlib %windir%\SysWOW64\msdatsrc.tlb
Visual Basic 6.0 Service Pack 6のセキュリティ更新プログラム:2012年8月14日 msiファイルをダウンロードし、名前をKB2708437.msiに変更します。
注:Service Pack 6ダウンロードへの直接リンクは HERE にあります。
fix.cmdを実行すると、問題は修正されます!
Fix.cmdが行うことは、現在のMSCOMCTL.ocxおよびCOMCTL32.ocxファイルを適切に登録解除してから削除し、最新のVisual Basic 6 SP6ロールアップパッチを適用することです。実際、スクリプトは、バージョンに関係なく、すべてのファイルを更新することにより、パッチを強制的にインストールしてから再インストールします。最後に、msdatsrc.tlbタイプライブラリを登録します。
これがあなたのために働くかどうか私に知らせてください。
================================================== =====================
高度なソリューション:
ただし、レジストリを誤って破損した場合は、MSCOMCTL.ocxおよびCOMCTL32.ocxのバージョンをできるだけ多く入手する必要があります。次に、古いバージョンに戻って新しいバージョンから開始し、登録および登録解除する必要があります。
MSCOMCTL.ocxの最新バージョンは2012年5月の6.1.98.39(v2.1)であり、システムにインストールされ、すべての問題を引き起こしている可能性が高いです。
最も古い(レガシー)バージョンは、1998年にVisual Basic 6に同梱されていたもの6.1.97.82(v2.0)、または初期のサービスパックに同梱されたもの6.1.97.862005年4月.
例:
regsvr32 /s comctl32.6.0.98.34.ocx
regsvr32 /s /u comctl32.6.0.98.34.ocx
regsvr32 /s comctl32.6.0.81.6.ocx
regsvr32 /s /u comctl32.6.0.81.6.ocx
regsvr32 /s comctl32.6.0.81.5.ocx
regsvr32 /s /u comctl32.6.0.81.5.ocx
regsvr32 /s mscomctl.6.1.98.39.(2.1).ocx
regsvr32 /s /u mscomctl.6.1.98.39.(2.1).ocx
regsvr32 /s mscomctl.6.1.98.34.ocx
regsvr32 /s /u mscomctl.6.1.98.34.ocx
regsvr32 /s mscomctl.6.1.97.86.ocx
regsvr32 /s /u mscomctl.6.1.97.86.ocx
regsvr32 /s mscomctl.6.1.97.82.(2.0).ocx
regsvr32 /s /u mscomctl.6.1.97.82.(2.0).ocx
regsvr32 /s /u %windir%\SysWOW64\comctl32.ocx
regsvr32 /s /u %windir%\SysWOW64\mscomctl.ocx
del /q %windir%\SysWOW64\comctl32.ocx
del /q %windir%\SysWOW64\mscomctl.ocx
msiexec /passive /norestart /i KB2708437.msi
msiexec /passive /a KB2708437.msi
regtlib %windir%\SysWOW64\msdatsrc.tlb
警告:
これらのファイルをインターネットで検索しないでください。異なるバージョンのOCXファイルを見つけるには、次のような公式のMicrosoft Installerパッケージをダウンロードして抽出します。
CCleaner バージョン4.0以降を実行して、コンピューター上のその他のActiveX関連の問題を修正することもお勧めします。
問題を修正するには:
次のコードでバッチファイルを作成します。
@echo off
reg query "HKEY_CLASSES_ROOT\typelib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.1"
if %errorlevel%==0 GOTO DELREGKEY
if %errorlevel%==1 GOTO REGISTEROCX
:DELREGKEY
reg delete hkcr\typelib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0 /f
:REGISTEROCX
if exist %systemroot%\SysWOW64\cscript.exe goto 64
%systemroot%\system32\regsvr32 /u mscomctl.ocx /s
%systemroot%\system32\regsvr32 mscomctl.ocx /s
exit
:64
%systemroot%\sysWOW64\regsvr32 /u mscomctl.ocx /s
%systemroot%\sysWOW64\regsvr32 mscomctl.ocx /s
exit
私はwin7を使用していますが、同じ問題があります。今日、この問題を解決しました。プロジェクトに多くのエラーをロードして、プロジェクト=>コンポーネント=> Microsoft Windows Common Controls 6.0(SP6)に進んでからプロジェクトを保存するように命令してください(ファイルの使用はc:\ windows\syswow64でした)\mscomctl.ocx)
私にとっての解決策は、このVB6パッチをインストールすることです。 Server2008(32ビット)を使用しています。
http://www.Microsoft.com/en-us/download/details.aspx?id=10019
私たちが2014年にまだこれについて話しているのは悲しいことですが...ここにあります。 :)
Puetzkのコメントから:これらは時代遅れです: Microsoft Visual Basic 6.0 Service Pack 6累積更新プログラム ( kb957924 )を使用する必要があります。
レジストリを確認してみてください
2.1バージョンの場合、MSCOMCTL.OCXの問題をロードできません。
2.0バージョンに復元できます(ファイルをコピーするだけでなく、2.1の登録を解除して、復元したファイルを登録する必要があります)
または
最新の2.2バージョンを試すことができます
いくつかのバージョン情報:
一部のコンピューターでは、MSCOMCTL.OCX
の "2.0"バージョンがActiveX KillBitsリストに追加されているため、デザインビューでもコントロールの読み込みまたは実行が許可されないことがわかりました。 「2.1」バージョンにアップデートすると、これが解決されるため、推奨されるソリューションです。
have toプログラムを「今」実行するか、ソースコードにアクセスできない場合、または大規模なモジュールプロジェクトでコントロールが400回使用されるような重大な場合には、 「大ハンマー」メソッドを使用してレジストリを更新し、コントロールを再度有効にします。
**
WARNING:Windowsレジストリを間違った方法で編集すると、コンピューターがめちゃくちゃになる可能性があります。何をしているのかわからない場合は、そのままにしておくか、続行する前に学校に通ってください。
**
KillBitのクリア:
- レジストリエディター(regedit.exeまたはregedt32.exe)を実行します。
- 左側のパネルで、キーHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility {BDD1F04B-858B-11D1-B16A-00C0F0283628}に移動します
- 右側のパネルで「互換性フラグ」をダブルクリックし、値を16進数0x400(10進数1024)から0に変更して、[OK]をクリックします。
- MSCOMCTL.OCXの「2.0」バージョンを使用するアプリケーションを起動します。設計どおりに実行する必要があります。
ActiveX KillBitsリストは、Microsoftにセキュリティリスクと見なされるコントロールを無効にする手段を提供することを目的としており、ActiveX KillBitsリストがシステムにランダムに見えるように再適用されるようにメカニズムを設計しました。更新プログラムがインストールされている場合に加えて、レジストリの変更を再適用する計画を立てる必要があります。レジストリマージファイルの作成は非常にうまく機能しますが、静かなプロセスではないため、アプリを実行するたびに実行したいことではありません(Windows Scriptingを使用して静かにこれを行う方法がありますが、自分の)。 KillBitは、アプリケーションからコントロールが要求された場合にのみチェックされるため、アプリケーションがコントロールを起動してロードすると、リセットから安全です。
VbpプロジェクトでNoControlUpgrade=1
が見つかりません。代わりに、xpとwindows7 x64の両方で開発します。プロジェクトをウィンドウ7からXPに移動すると、エラーが発生しました。
私が見つけたものから、これらは異なっています:
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.1#0; MSCOMCTL.OCX
Vbpファイルで#2,1
を#2.0
に戻しただけで、すぐに実行できます。この種の問題は以前に発生したものであるため、Microsoftがそれに応じて説明し、解決することを望んでいます。ありがとう。
この問題は、今日私に不思議なことに現れました。 Windowsの更新は行っていないので、原因はわかりません。
これにより修正されました(昇格したコマンドプロンプトで):
regtlibv12.exe msdatsrc.tlb
この問題があり、さまざまな解決策を試しました。このエラーはいくつかの異なる理由で発生すると思いますが、私にとってはうまくいきませんでした。私の解決策は、この質問に対する私の答えです:
https://stackoverflow.com/a/15785253/2240058
他に何も機能していない場合は試してみる価値があります。
MSCOMCTL.OCXを使用したVBAマクロと同じ問題。 「reg/unreg mscomctl.ocx」などのソリューションではまだ解決されていない問題上記のRumiの情報を使用しました。 * .dotファイルを編集し、#2.0#0を検索し、それを#2.1#0に変更します->動作しました
私は同様の問題を抱えており、VB6で書かれたプログラムを過去10年間実行していましたが、今ではクライアントはいくつかの大きな変更を行いたいと思っています。プロジェクトを開けませんでした、それはいつもその厄介なmscomctl.ocxエラーでした。私は多くのことをしましたが、問題を解決できませんでした。その後、私は簡単な方法を考えて、最新のmscomctlをダウンロードしました( 次に、新しいプロジェクトを開き、mscomctl、activxコントロールなどのすべてのコンポーネントを追加して保存し、この新しく作成したプロジェクトファイルをメモ帳で開いてから、正確な詳細をコピーして、元のプロジェクトに置き換えます...古いプロジェクトは大騒ぎせずに正常に開きました!この経験が誰かを助けることを願っています。
私にとって、このソリューションは魅力のように機能しました: http://home.pacific.net.hk/~edx/bin/readmeocx.txt
次のような2行を修正します。
Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; COMDLG32.OCX
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX
ファイル(.vbpおよび.frm)で次のような行を検索します。
Begin ComctlLib.ImageList ILTree
Begin ComctlLib.StatusBar StatusBar1
Begin ComctlLib.Toolbar Toolbar1`
行は次のようになります。
Begin MSComctlLib.ImageList ILTree
Begin MSComctlLib.StatusBar StatusBar1
Begin MSComctlLib.Toolbar Toolbar1`
私は最近、すべてのソースをWindows 8 32ボックスに入れました。既存のプロジェクトでmscomctl.ocx
の読み込みに問題がありました。
新しいプロジェクトを作成し、共通コントロール(すべて)を追加します。プロジェクトを保存し、問題なくリロードします。
新しいプロジェクトと古いプロジェクトのヘッダーを比較すると、古いヘッダーではreference = *\blah blahが使用されます。これを削除すると、Object = {blah}に置き換えて問題を解決できます。
ここで提案したことを試した後も、引き続き問題が発生しました。最終的に、SysWOW64フォルダーにmscomctl.ocx
のバージョンが間違っていることがわかりました。私は次のバージョンが動き回っているのを見つけました:
Mar. 09, 2004 01:00 AM 1,081,616 mscomctl.ocx
Jun. 06, 2012 07:59 PM 1,070,152 mscomctl.ocx
Dec. 08, 2015 03:57 AM 1,070,232 MSCOMCTL.OCX
最後の問題(1,070,232)を取得することで、この問題は解決しました。