web-dev-qa-db-fra.com

VB6 IDE ne peut pas charger MSCOMCTL.OCX après la mise à jour de la base de connaissances 2687323

Après que Windows Update a installé la mise à jour de sécurité KB268732 , le chargement de mon projet VB6 échoue. Le message d'erreur affiché est "" [project_vbp_path] /MSCOMCTL.OCX "n'a pas pu être chargé - Continuer le chargement du projet?". Notez que le chemin dans le message est le chemin du dossier de fichiers vbp au lieu du chemin enregistré du contrôle.

Détails:

  1. MSCOMCTL.OCX est enregistré dans le dossier system32 habituel.
  2. L'exécutable produit par exactement le même projet, une heure avant la fin de la mise à jour et charge le fichier MSCOMCTL.OCX mis à jour (je l'ai vérifié avec Process Explorer).

La description de la mise à jour de sécurité indique que MSCOMCTL.OCX a une nouvelle version corrigée. J'ai donc coché la case "Mettre à niveau les contrôles ActiveX" dans les propriétés du projet. Je l'ai essayé des deux côtés; vérifié et décoché en vain. VB6 IDE a refusé de charger l'OCX mis à niveau.

44
Rumi

Après des heures d’effort, restauration du système, enregistrement, désinscription des cycles et sommeil nocturne, j’ai réussi à identifier le problème. Il se trouve que le fichier de projet contient la ligne ci-dessous:

Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX

L'information de version "2.0" semble être la raison pour laquelle le chargement n'a pas été effectué. Le changer en "2.1" dans le bloc-notes a résolu le problème:

Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.1#0; MSCOMCTL.OCX

Donc, dans une situation similaire "OCX ne peut pas être chargé", un moyen possible de résolution consiste à démarrer un nouveau projet. Mettez le contrôle sur l’un des formulaires et vérifiez le fichier vbp avec notepad pour voir quelle version il attend.


OU UNE MÉTHODE BEAUCOUP PLUS FACILE:

(J'ai ajouté cette section après le précieux commentaire de Bob ci-dessous)

Vous pouvez ouvrir votre fichier de projet VBP dans le Bloc-notes et trouver la mauvaise ligne qui empêche VB6 de mettre à niveau le projet automatiquement vers la version 2.1 et de le supprimer:

NoControlUpgrade=1
54
Rumi

Le problème a été résolu en exécutant ce qui suit dans l'invite de commande élevée:

commande:

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

ou

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

J'espère que ça aide.

41
Auto

Le problème:

Les produits Microsoft Office 2010 (ou version ultérieure) installent des mises à jour qui rompent la compatibilité des fichiers MSCOMCTL.ocx et COMCTL32.ocx. Malheureusement, cela affecte de nombreux autres programmes tels que Visual Basic 6 SP6 et même Oracle Virtual Box v5. Le problème actuel est HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0 clé d'enregistrement. Vous pouvez trouver des informations générales détaillées sur ce problème ici .

Voici une autre solution de travail:

La solution suppose que vous n'avez pas endommagé votre registre en supprimant, en remplaçant et en réenregistrant MSCOMCTL.ocx et COMCTL32.ocx sans annuler l'inscription des fichiers de correctif Office.

Créez un fichier batch appelé fix.cmd et placez-y les commandes suivantes:

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

Télécharger depuis mise à jour de sécurité pour Visual Basic 6.0 Service Pack 6: 14 août 2012 le fichier msi et renommez-le KB2708437.msi.

Remarque: un lien direct vers le téléchargement du Service Pack 6 se trouve ICI .

Exécutez fix.cmd et le problème sera résolu!

Fix.cmd ne supprime pas correctement les fichiers MSCOMCTL.ocx et COMCTL32.ocx actuels, puis les applique, puis applique le dernier correctif cumulatif Visual Basic 6 SP6. En fait, le script impose d'installer le correctif, puis de le réinstaller en mettant à jour tous les fichiers, quelle que soit leur version. Enfin, il enregistre la bibliothèque de types msdatsrc.tlb.

S'il vous plaît laissez-moi savoir si cela fonctionne pour vous.

=============================================== =====================

Solution avancée:

Si toutefois vous avez accidentellement endommagé votre base de registre, vous devez vous procurer le plus grand nombre de versions de MSCOMCTL.ocx et de COMCTL32.ocx disponibles. Ensuite, vous devez commencer à partir de la version la plus récente en revenant à l’ancien et enregistrer et annuler l’inscription les fichiers ocx.

La dernière version de MSCOMCTL.ocx est 6.1.98.39 (v2.1) de mai 2012, qui est probablement celle qui a été installée sur votre système et qui est à l'origine de tous vos problèmes.

La version la plus ancienne (héritée) est celle fournie avec Visual Basic 6 en 1998 6.1.97.82 (v2.0), ou celle fournie avec un service pack antérieur 6.1.97.86 le avril 2005.

Exemple:

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   

AVERTISSEMENT:

Ne recherchez pas ces fichiers sur Internet. Pour trouver différentes versions des fichiers OCX, téléchargez et extrayez les packages officiels de Microsoft Installer, tels que les suivants:

avril 2005 - Microsoft KB896559

décembre 2008 - Microsoft KB926857

avril 2009 - Microsoft KB957924

mai 2012 - Microsoft KB2708437

Il est également recommandé d'exécuter CCleaner version 4.0 ou ultérieure pour résoudre tout autre problème lié à ActiveX sur votre ordinateur.

12
Elias

Pour résoudre le problème:

Créez un fichier batch avec le code suivant:

@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

J'utilise win7 et a le même problème. Aujourd'hui, j'ai résolu ce problème en chargeant avec beaucoup d'erreurs avec mon projet. Il suffit de donner l'ordre de continuer après. Goto Project => Composant => Microsoft Windows Common Controls 6.0 (SP6), puis enregistrez le projet (l'utilisation du fichier était c:\windows\syswow64\mscomctl.ocx)

4
Johan

La solution pour moi consiste à installer ce correctif VB6. Je suis sur Server2008 (32 bits).

http://www.Microsoft.com/en-us/download/details.aspx?id=10019

Cela me rend triste que nous en parlions encore en 2014 ... mais le voici. :)


Commentaire de puetzk: Celles-ci sont obsolètes: vous souhaitez utiliser mise à jour cumulative de Microsoft Visual Basic 6.0 Service Pack 6 ( kb957924 ).

3
EJA

Vous pouvez essayer de vérifier votre registre

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

S'il s'agit de la version 2.1, le problème ne pourra pas être chargé avec MSCOMCTL.OCX.

Vous pouvez restaurer la version 2.0 ( non seulement copier le fichier, vous devez désenregister 2.1 et enregistrer le fichier restauré ).

Ou

Vous pouvez essayer la dernière version 2.2

Quelques informations de version:

  • 6.0.88.62 (2.0)
  • 6.1.97.82 (2.0)
  • 6.1.98.34 (2.1) <<< ça ne marche pas pour moi
  • 6.1.98.46 (2.2)
2
sonicli

Sur certains ordinateurs, j'ai constaté que la version "2.0" de MSCOMCTL.OCX a été ajouté à la liste ActiveX KillBits et le contrôle ne sera donc pas autorisé à se charger ni à s'exécuter, même en mode création. La mise à jour vers la version "2.1" résoudra ce problème et constitue la solution recommandée.

Dans les cas critiques, où vous devez exécuter un programme "maintenant", ou si vous n'avez pas accès au code source, ou si le contrôle est utilisé 400 fois dans un grand projet modulaire, vous pouvez utiliser un méthode "gros marteau" et mettez à jour le registre pour réactiver le contrôle:

**
AVERTISSEMENT : La modification incorrecte du registre Windows peut gâcher votre ordinateur. Si vous n'êtes pas sûr de ce que vous faites, laissez-le tranquille ou suivez des cours avant de poursuivre.
**

Le clear the KillBit:

  1. Exécutez l'Éditeur du Registre (regedit.exe ou regedt32.exe)
  2. Dans le panneau de gauche, accédez à la clé HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Compatibilité ActiveX {BDD1F04B-858B-11D1-B16A-00C0F0283628}
  3. Dans le volet de droite, double-cliquez sur "Indicateurs de compatibilité", remplacez la valeur Hex 0x400 (décimal 1024) par 0, puis cliquez sur OK.
  4. Lancez l'application qui utilise la version "2.0" de MSCOMCTL.OCX. il devrait fonctionner comme prévu.

La liste ActiveX KillBits a pour but de donner à Microsoft le moyen de désactiver les contrôles considérés comme présentant un risque pour la sécurité. Ce mécanisme a été conçu de manière à ce que la liste ActiveX KillBits soit réappliquée au système à des heures apparemment aléatoires. En plus de la date d’installation d’une mise à jour, vous devez donc planifier la nouvelle application de la modification du registre. Créer un fichier de fusion de registre fonctionne plutôt bien, mais vous ne devez pas le faire à chaque fois que l'application est exécutée, car ce n'est pas un processus silencieux (il existe des moyens de le faire en mode silencieux à l'aide de Windows Scripting, mais vous devrez l'apprendre de manière autonome. posséder). Le KillBit est vérifié uniquement lorsque le contrôle est demandé par une application. Vous pouvez donc vous protéger des réinitialisations une fois que l'application est lancée et charge le contrôle.

2
LordRegent

Je ne trouve pas NoControlUpgrade=1 sur mon projet vbp. Au lieu de cela, je développe à la fois sur xp et windows7 x64. Lorsque j'ai déplacé le projet de la fenêtre 7 vers xp, l'erreur est survenue.

D'après ce que je découvre, ce sont différentes:

Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX

Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.1#0; MSCOMCTL.OCX

Je viens de changer le #2,1 retour à #2.0 sur le fichier vbp et il peut être exécuté immédiatement. Ce genre de problèmes s’est déjà produit, alors espérons que Microsoft les expliquera et les résoudra en conséquence Merci.

1
Will.i.am

Ce problème est mystérieusement apparu pour moi aujourd'hui. Je n'avais pas fait de mises à jour Windows, donc je ne connais pas la cause.

Cela l'a corrigé (dans l'invite de commande élevée):

regtlibv12.exe msdatsrc.tlb

1
Professor1942

J'ai eu ce problème et essayé de nombreuses solutions différentes. Ils n'ont pas fonctionné pour moi bien que je pense que cette erreur se produit pour différentes raisons. Ma solution est dans ma réponse à cette question ici:

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

Cela vaut la peine d'essayer si rien d'autre ne fonctionne pour vous.

1
Lee Chetwynd

Même problème avec les macros VBA utilisant MSCOMCTL.OCX. Problème toujours non résolu avec des solutions telles que "reg/unreg mscomctl.ocx", a utilisé l'info ci-dessus de Rumi. Edité mon fichier * .dot, recherchez # 2.0 # 0, remplacez-le par # 2.1 # 0 -> cela a fonctionné

1
Etienne Fritsch

J'ai eu un problème similaire, j'ai un programme en cours d'exécution depuis 10 ans écrit en VB6, maintenant le client voulait apporter des modifications majeures, et toutes mes machines qui sont maintenant sous Windows 10; n’a pas réussi à ouvrir le projet, c’est toujours cette sale erreur mscomctl.ocx. J'avais fait beaucoup de choses mais je ne pouvais pas résoudre le problème. Puis, j'ai trouvé la solution de facilité, j'ai téléchargé la dernière version de mscomctl ( mscomctl.ocx Ensuite, ouvrez un nouveau projet, ajoutez tous les composants tels que mscomctl, les contrôles activx, etc., sauvegardez-le et ouvrez ce fichier de projet nouvellement créé dans le Bloc-notes, puis copiez les détails exacts et remplacez-les dans le projet original .... et bingo! L'ancien projet s'est ouvert normalement sans aucun problème! J'espère que cette expérience aidera quelqu'un.

0
user3615318

Pour moi, cette solution a fonctionné à merveille: http://home.pacific.net.hk/~edx/bin/readmeocx.txt

Fixez ces deux lignes comme ça:

Object={F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0; COMDLG32.OCX
Object={831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0; MSCOMCTL.OCX

Recherchez dans les fichiers (.vbp et .frm) des lignes comme celle-ci:

Begin ComctlLib.ImageList ILTree
Begin ComctlLib.StatusBar StatusBar1 
Begin ComctlLib.Toolbar Toolbar1` 

Les lignes peuvent être comme ceci:

Begin MSComctlLib.ImageList ILTree 
Begin MSComctlLib.StatusBar StatusBar1
Begin MSComctlLib.Toolbar Toolbar1` 
0
Adrian

J'ai récemment mis toutes mes sources sur une boîte Windows 8 32. Les problèmes de chargement mscomctl.ocx avec des projets existants.

J'ai créé un nouveau projet et ajouter le contrôle commun (tous). enregistrer le projet et rechargé pas de problème.

lorsque vous comparez les en-têtes de projet new vs old, l'ancien utilise reference = *\blah blah. J'ai trouvé la suppression de cela en le remplaçant par le Object = {blah} résolu le problème.

0
John Murphy

J'ai continué à avoir des problèmes après avoir essayé les choses suggérées ici. Finalement, il m'est apparu que j'avais la mauvaise version de mscomctl.ocx dans mon dossier SysWOW64. J'ai trouvé les versions suivantes qui tournent autour:

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

Obtenir le dernier (1 070 232) a résolu ce problème pour moi.

0
Jeff Roe