web-dev-qa-db-ja.com

VB6 IDEは、KB 2687323の更新後にMSCOMCTL.OCXをロードできません

Windows Updateがインストールされたセキュリティアップデート KB268732 の後、VB6プロジェクトのロードに失敗します。表示されるエラーメッセージは、「 '[project_vbp_path] /MSCOMCTL.OCX'をロードできませんでした-プロジェクトのロードを続行しますか?」です。メッセージのパスは、コントロールの登録済みパスではなくvbpファイルフォルダーのパスであることに注意してください。

詳細:

  1. MSCOMCTL.OCXは、通常のsystem32フォルダーに登録されます。
  2. 更新が正常に実行され、更新されたMSCOMCTL.OCXを読み込む1時間前に、まったく同じプロジェクトによって生成された実行可能ファイル(Process Explorerで確認しました)。

セキュリティ更新プログラムの説明には、MSCOMCTL.OCXに新しい修正バージョンがあることが記載されています。そこで、「ActiveXコントロールのアップグレード」チェックボックスのプロジェクトプロパティをチェックしました。両方の方法で試しました。チェックマークが付いているか、チェックマークが付いていないかがわかりません。 VB6 IDEは、アップグレードされたOCXのロードを拒否しました。

44
Rumi

数時間の努力、システムの復元、登録、登録解除のサイクル、そして夜の睡眠の後、問題を特定することに成功しました。プロジェクトファイルには次の行が含まれていることがわかります。

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
54
Rumi

この問題は、昇格したコマンドプロンプトで次を実行することで解決されました。

コマンド:

cd C:\Windows\System32\
regtlib msdatsrc.tlb

または

cd C:\Windows\SysWOW64\
regtlib msdatsrc.tlb

これがお役に立てば幸いです。

41
Auto

問題:

Microsoft Office 2010(またはそれ以降)製品は、MSCOMCTL.ocxとCO​​MCTL32.ocxの互換性を壊す更新をインストールします。残念ながら、これはVisual Basic 6 SP6やOracle Virtual Box v5などの他の多くのプログラムに影響します。実際の問題は、HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0レジストリキーです。この問題に関する詳細な背景情報を見つけることができます こちら

別の有効なソリューションは次のとおりです:

ソリューションは、Officeパッチファイルの登録を解除せずにMSCOMCTL.ocxとCO​​MCTL32.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パッケージをダウンロードして抽出します。

2005年4月-Microsoft KB896559

2008年12月-Microsoft KB926857

2009年4月-Microsoft KB957924

2012年5月-Microsoft KB2708437

CCleaner バージョン4.0以降を実行して、コンピューター上のその他のActiveX関連の問題を修正することもお勧めします。

12
Elias

問題を修正するには:

次のコードでバッチファイルを作成します。

@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
6
Silvio Jegodka

私はwin7を使用していますが、同じ問題があります。今日、この問題を解決しました。プロジェクトに多くのエラーをロードして、プロジェクト=>コンポーネント=> Microsoft Windows Common Controls 6.0(SP6)に進んでからプロジェクトを保存するように命令してください(ファイルの使用はc:\ windows\syswow64でした)\mscomctl.ocx)

4
Johan

私にとっての解決策は、この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 )を使用する必要があります。

3
EJA

レジストリを確認してみてください

  • HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib {831FDD16-0C5C-11D2-A9FC-0000F8754DA1}

2.1バージョンの場合、MSCOMCTL.OCXの問題をロードできません。

2.0バージョンに復元できます(ファイルをコピーするだけでなく、2.1の登録を解除して、復元したファイルを登録する必要があります

または

最新の2.2バージョンを試すことができます

いくつかのバージョン情報:

  • 6.0.88.62(2.0)
  • 6.1.97.82(2.0)
  • 6.1.98.34(2.1)<<<うまくいかない
  • 6.1.98.46(2.2)
2
sonicli

一部のコンピューターでは、MSCOMCTL.OCXの "2.0"バージョンがActiveX KillBitsリストに追加されているため、デザインビューでもコントロールの読み込みまたは実行が許可されないことがわかりました。 「2.1」バージョンにアップデートすると、これが解決されるため、推奨されるソリューションです。

have toプログラムを「今」実行するか、ソースコードにアクセスできない場合、または大規模なモジュールプロジェクトでコントロールが400回使用されるような重大な場合には、 「大ハンマー」メソッドを使用してレジストリを更新し、コントロールを再度有効にします。

**
WARNING:Windowsレジストリを間違った方法で編集すると、コンピューターがめちゃくちゃになる可能性があります。何をしているのかわからない場合は、そのままにしておくか、続行する前に学校に通ってください。
**

KillBitのクリア:

  1. レジストリエディター(regedit.exeまたはregedt32.exe)を実行します。
  2. 左側のパネルで、キーHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility {BDD1F04B-858B-11D1-B16A-00C0F0283628}に移動します
  3. 右側のパネルで「互換性フラグ」をダブルクリックし、値を16進数0x400(10進数1024)から0に変更して、[OK]をクリックします。
  4. MSCOMCTL.OCXの「2.0」バージョンを使用するアプリケーションを起動します。設計どおりに実行する必要があります。

ActiveX KillBitsリストは、Microsoftにセキュリティリスクと見なされるコントロールを無効にする手段を提供することを目的としており、ActiveX KillBitsリストがシステムにランダムに見えるように再適用されるようにメカニズムを設計しました。更新プログラムがインストールされている場合に加えて、レジストリの変更を再適用する計画を立てる必要があります。レジストリマージファイルの作成は非常にうまく機能しますが、静かなプロセスではないため、アプリを実行するたびに実行したいことではありません(Windows Scriptingを使用して静かにこれを行う方法がありますが、自分の)。 KillBitは、アプリケーションからコントロールが要求された場合にのみチェックされるため、アプリケーションがコントロールを起動してロードすると、リセットから安全です。

2
LordRegent

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がそれに応じて説明し、解決することを望んでいます。ありがとう。

1
Will.i.am

この問題は、今日私に不思議なことに現れました。 Windowsの更新は行っていないので、原因はわかりません。

これにより修正されました(昇格したコマンドプロンプトで):

regtlibv12.exe msdatsrc.tlb

1
Professor1942

この問題があり、さまざまな解決策を試しました。このエラーはいくつかの異なる理由で発生すると思いますが、私にとってはうまくいきませんでした。私の解決策は、この質問に対する私の答えです:

https://stackoverflow.com/a/15785253/2240058

他に何も機能していない場合は試してみる価値があります。

1
Lee Chetwynd

MSCOMCTL.OCXを使用したVBAマクロと同じ問題。 「reg/unreg mscomctl.ocx」などのソリューションではまだ解決されていない問題上記のRumiの情報を使用しました。 * .dotファイルを編集し、#2.0#0を検索し、それを#2.1#0に変更します->動作しました

1
Etienne Fritsch

私は同様の問題を抱えており、VB6で書かれたプログラムを過去10年間実行していましたが、今ではクライアントはいくつかの大きな変更を行いたいと思っています。プロジェクトを開けませんでした、それはいつもその厄介なmscomctl.ocxエラーでした。私は多くのことをしましたが、問題を解決できませんでした。その後、私は簡単な方法を考えて、最新のmscomctlをダウンロードしました( mscomctl.ocx 次に、新しいプロジェクトを開き、mscomctl、activxコントロールなどのすべてのコンポーネントを追加して保存し、この新しく作成したプロジェクトファイルをメモ帳で開いてから、正確な詳細をコピーして、元のプロジェクトに置き換えます...古いプロジェクトは大騒ぎせずに正常に開きました!この経験が誰かを助けることを願っています。

0
user3615318

私にとって、このソリューションは魅力のように機能しました: 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` 
0
Adrian

私は最近、すべてのソースをWindows 8 32ボックスに入れました。既存のプロジェクトでmscomctl.ocxの読み込みに問題がありました。

新しいプロジェクトを作成し、共通コントロール(すべて)を追加します。プロジェクトを保存し、問題なくリロードします。

新しいプロジェクトと古いプロジェクトのヘッダーを比較すると、古いヘッダーではreference = *\blah blahが使用されます。これを削除すると、Object = {blah}に置き換えて問題を解決できます。

0
John Murphy

ここで提案したことを試した後も、引き続き問題が発生しました。最終的に、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)を取得することで、この問題は解決しました。

0
Jeff Roe