Partage
  • Partager sur Facebook
  • Partager sur Twitter

Exception levée : 'System.Runtime.InteropServices

exception non gérée du type 'System.Runtime.InteropServices.COMExcepti

    19 juin 2018 à 22:30:29

    Bonjour a tous

    j'ai rencontre un problème qui persiste depuis plusieurs jours. et je ne sais pas comment le résoudre. Quand j'execute le programme j'ai une exception la suivante:

    System.Runtime.InteropServices.COMException : 'La récupération de la fabrique de classes COM pour le composant avec le CLSID {FDD9199A-1BB4-4433-B9E1-D550D3118676} a échoué en raison de l'erreur suivante : 80040154 Classe non enregistrée (Exception de HRESULT : 0x80040154 (REGDB_E_CLASSNOTREG)).'

    Une exception non gérée du type 'System.Runtime.InteropServices.COMException' s'est produite dans mscorlib.dll

    La récupération de la fabrique de classes COM pour le composant avec le CLSID {FDD9199A-1BB4-4433-B9E1-D550D3118676} a échoué en raison de l'erreur suivante : 80040154 Classe non enregistrée (Exception de HRESULT : 0x80040154 (REGDB_E_CLASSNOTREG)).

    si vous pouvez m'aider

    L'exception se déclenche a ce niveau   this._manDMS = new IManage.ManDMS();

    le code est le suivant

     class WorksiteClass
        {
            #region " Private Members "
    
            private Database _db;
            private string _sqlServer;
            private string _sqlDatabase;
            private string _sqlUserId;
            private string _sqlPassword;
    
            private IManage.IManDMS _manDMS;
            private IManage.IManSession _manSession;
            private IManage.IManDatabase _manDatabase;
            private string _worksiteServer;
            private string _worksiteDatabase;
            private string _worksiteUserId;
            private string _worksitePassword;
    
            private bool _connected;
            #endregion
    
            #region " Public Properties "
    
            public Database Db
            {
                get { return this._db; }
            }
    
            public string SQLServer
            {
                get { return this._sqlServer; }
            }
    
            public string SQLDatabase
            {
                get { return this._sqlDatabase; }
            }
    
            public string SQLUserId
            {
                get { return this._sqlUserId; }
            }
    
            public string SQLPassword
            {
                get { return this._sqlPassword; }
            }
    
            public IManage.IManDMS ManDMS
            {
                get { return this._manDMS; }
            }
    
            public IManage.IManSession ManSession
            {
                get { return this._manSession; }
            }
    
            public IManage.IManDatabase ManDatabase
            {
                get { return this._manDatabase; }
            }
    
            public string WorksiteServer
            {
                get { return this._worksiteServer; }
            }
    
            public string WorksiteDatabase
            {
                get { return this._worksiteDatabase; }
            }
    
            public string WorksiteUserId
            {
                get { return this._worksiteUserId; }
            }
    
            public string WorksitePassword
            {
                get { return this._worksitePassword; }
            }
    
            #endregion
    
            #region " Public Constructors/Destructors "
    
    
            public WorksiteClass(string sqlServer, string sqlDatabase, string sqlUserId, string sqlPassword, string worksiteServer, string worksiteDatabase, string worksiteUserId, string worksitePassword)
            {
                this._db = null;
                this._sqlServer = sqlServer;
                this._sqlDatabase = sqlDatabase;
                this._sqlUserId = sqlUserId;
                this._sqlPassword = sqlPassword;
    
                this._manDMS = null;
                this._manSession = null;
                this._manDatabase = null;
                this._worksiteServer = worksiteServer;
                this._worksiteDatabase = worksiteDatabase;
                this._worksiteUserId = worksiteUserId;
                this._worksitePassword = worksitePassword;
    
                this._connected = false;
    
                Connect();
    
            }
    
            #endregion
    
            #region " Public Methods "
    
            public bool Connect()
            {
    
                if ((this._connected))
                {
                    return this._connected;
                }
    
                //
                // Sql Connection
                //
                this._db = Richard.Audet.SqlTools.GetDatabase(this._sqlServer, this._sqlDatabase, this._sqlUserId, this._sqlPassword, System.Reflection.Assembly.GetExecutingAssembly().GetName().Name, 600);
    
                //
                // IManage Connection
                //
                this._manDMS = new IManage.ManDMS();
                this._manSession = this._manDMS.Sessions.Add(this._worksiteServer);
                this._manSession.Login(this._worksiteUserId, this._worksitePassword);
                this._manSession.MaxRowsForSearch = 99999;
                this._manSession.MaxRowsNonSearch = 99999;
                this._manSession.Timeout = 600;
                this._manSession.AllVersions = true;
    
                if ((this._manSession.Connected))
                {
                    foreach (IManage.IManDatabase database in this._manSession.Databases)
                    {
                        if ((this._worksiteDatabase.Trim().ToLower() == database.Name.Trim().ToLower()))
                        {
                            this._manDatabase = database;
                        }
                    }
                }
    
                this._connected = true;
    
                return this._connected;
    
            }
    
    
            public void Disconnect()
            {
                //
                // Sql Connection
                //
                if ((this._db != null))
                {
                    this._db = null;
                }
    
                //
                // IManage Connection
                //
                if ((this._manSession != null))
                {
                    if ((this._manSession.Connected))
                    {
                        this._manSession.Logout();
                    }
                    this._manSession = null;
                }
    
                if ((this._manDMS != null))
                {
                    this._manDMS.Close();
                    this._manDMS = null;
                }
    
            }
    
            #endregion
        }

    -
    Edité par nj284 19 juin 2018 à 22:56:54

    • Partager sur Facebook
    • Partager sur Twitter
      21 juin 2018 à 9:47:02

      IManage est surement un élément représentant un import COM non managé.

      Les COM se découpent en 2 éléments sous Windows : Une interface qui décrit le composant et une (ou plusieurs) implémentations de cette interface. Que ce soit les interfaces ou les implémentations, chaque élément est identifié par un GUID. Par la suite, le système Windows gère le cycle de vie de ces composants COM. Lorsqu'une application demande à utiliser un composant COM, l'application doit transmettre le GUID de l'interface et de l'implémentation voulue au système, lequel va alors activer l'implémentation voulue. Tant que le compteur de référence est supérieur à 0 (ce qui veut dire que l'instance de l'implémentation est utilisée "quelque part"), le système conserve l'instance en vie. Dès que le compteur de référence tombe à 0, l'instance est détruite. Sous Windows, la relation entre les GUID et les chemins contenant les binaires à exécuter est stocké dans la base de registre.

      Ton erreur indique que ton application à demander d'activer un COM, mais le COM demandé est inconnu du système car il n'est pas enregistré dans la base de registre.

      Tu utilises surement un truc dans ton application, sans avoir suivi la procédure d'installation dudit truc (ou que cette procédure d'installation s'est mal passée).

      -
      Edité par Nisnor 21 juin 2018 à 9:48:53

      • Partager sur Facebook
      • Partager sur Twitter
        24 juin 2018 à 2:25:57

        • Partager sur Facebook
        • Partager sur Twitter
        Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.
          28 juin 2018 à 20:06:15

          Merci Nisnor  pour ta réponse, c'est exactement cela je suis entrain de corriger une application que je n'ai pas développé et je ne m'y connais pas en  import COM non managé. 

          l'élément représentant un import COM non managé est en x64 alors que le programme est en x86

          pouvez- vous m'expliquer comment corriger ce problème dans ce cas

          merci

          • Partager sur Facebook
          • Partager sur Twitter
            28 juin 2018 à 20:26:18

            >l'élément représentant un import COM non managé est en x64 alors que le programme est en x86

            Vous êtes sûr que c'est pas l'inverse ? Composant comme en 32bit (x86) et le programme en 64bit (x64).

            Généralement, les composants COM sont de vieux machin, donc plus souvent du 32bits que du 64 bits.

            La méthode la plus simple, c'est de mettre tout en 32bits ou tous en 64bits, en fonction des composants dont vous avez les sources.

            Qu'est-ce qui vous interdit de verrouiller la version du programme avec celle correspondant à votre composant COM ?

            • Partager sur Facebook
            • Partager sur Twitter
            Je recherche un CDI/CDD/mission freelance comme Architecte Logiciel/ Expert Technique sur technologies Microsoft.

            Exception levée : 'System.Runtime.InteropServices

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown