Interop excel 2003

Résolu
scromania Messages postés 452 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 11 janvier 2013 - 8 juin 2010 à 11:46
scromania Messages postés 452 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 11 janvier 2013 - 15 juin 2010 à 15:19
Bonjour,

J'ai en petit souci , il se trouve que dans mon système d'exploitation je possède MS office 2003 et MS office 2007.

J'utilise des fichiers sous excel 2003 extension DBF(DBASE IV) je peux les modifiers puis les enregistrer après avoir contacté mon service informatique de l'entreprise qui sont en contact a Microsoft et bien certain format ne sont plus pris en charge avec MS office 2007 donc DBASE. J'ai développer une application (en vb net) qui fonctionné très bien sous MS 2003 avec la bonne interop que j'avais integré dans l'application,lors de la generation il copie bien celle-ci dans l'emplacement du setup .Malheuresement il ne la prend pas en compte et charge toujours celle qui ce trouve dans c:\Prog...file\MS office\... 2007.

Ma question comment forcé l'application à utiliser interop que je lui est fourni plutot que la derniere installé par MS 2007 ?

Merci

scromania

7 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
15 juin 2010 à 09:14
En fait, l'inscription d'un ActiveX peut se faire manuellement mais il existe un méthode simple : regsvr32.exe

Ce qu'il faut simplement que tu fasses c'est que tu copie l'ActiveX dans le système, (si il y est déja alors ne l'écrase pas sinon Office 2007 risquerait de ne plus fonctionner correctement copie la donc dans le répertoire de ton application).

Puis sous une invite de commande tape :

regsvr32.exe "x:\chemin\nom.dll"

Tu recevras un message qui t'indiqueras le résultat de l'inscription du composant dans le registre.

Pour ce qui est de l'automatisation de cette tâche, tu peux créer un projet Setup qui déploiera le projet, l'ActiveX et l'inscrira de façon automatique si tu possède Visual Studio.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
3
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
14 juin 2010 à 01:05
Salut !

Tiens donc, voila une vrai question ca fait plaisir, pourquoi je ne l'ai pas vu plutôt..?

Alors en fait, je n'ai pas la réponse exacte mais je vais essayer de détailler le principe de l'Interop pour t'aider.

Voila, donc comme tu le sais peut être déjà, pour fonctionner sous .Net, une classe doit avoir une certaine architecture dira-t-on, ce qui n'est pas le cas des composant COM, c'est pourquoi, Visual Studio crée une DLL (Assembly) Interop, pour l'interopérabilité entre le programme et le composant.

L'assembly interop, appel l'ActiveX, pour exécuter ses fonctions, et comme un composant ActiveX est inscrit dans le registre, il va surement rechercher le composant le plus récent, ou encore, ton setup copie le fichier ActiveX mais l'inscription au registre ne se fait pas car un autre ActiveX plus récent est détecté.

Autre question, dans le setup de ton projet, tu déploies l'Interop qui est incluse par défaut mais est ce que tu déploies l'ActiveX dans le dossier système ?

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
scromania Messages postés 452 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 11 janvier 2013 9
14 juin 2010 à 16:43
non je ne deploie pas l'activeX, uniquement l'interop. par contre je ne comprend pas pourquoi , l'interé d'exporter l'interop (la dll) et de lui fournir les éléments nécessaires au bon fonctionnement.

Merci de ta reponse
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
14 juin 2010 à 17:10
Bien ce n'est pas compliqué :

Le programme suit le schéma suivant :

Programme <=> Interop <=> ActiveX

Contrairement aux programmes VB6, qui suit le schéma suivant :

Programme <=> ActiveX

Donc forcément pour fonctionner ton programme a besoin de tous les composants.

Sauf que, en .NET, lors ce que le programme recherche une assembly, il la recherche dans le répertoire courant s'il n'y est pas, déclenche une exception.

Pour le déploiement d'un ActiveX, c'est différent l'ActiveX doit indiquer sont emplacement sur le disque dans le registre de Windows, ainsi, si l'installation de mon programme déploie le même ActiveX que le tien, étant donné qu'il est déjà présent (sauf version + récente) il ne sera pas réinstallé, ton application utilisera mon ActiveX puisse qu'elle connait sont emplacement qui a été renseigné dans le registre, et c'est pourquoi il est préférable d'installer ces composant dans le répertoire système.

C'est surement le cas pour ton programme, tu ne déploies pas l'ActiveX mais juste l'interop, donc celui-ci interroge le registre de Windows et ne trouvant pas la bonne version du composant se rabat sur le composant plus récent dans le dossier d'office 2007.


Pour le déploiement d'un ActiveX, c'est différent l'ActiveX doit indiquer sont emplacement sur le disque dans le registre de windows, ainsi, si l'installation de mon programme déploie le même ActiveX que le tien, étant donné qu'il est déjà présent (sauf version + récente) il ne sera pas résinstallé, ton application utilisera mon ActiveX puisse qu'elle connait sont emplacement qui a été renseigné dans le registre, et c'est pourquoi il est préférable d'installer ces composant dans le répertoire système.

C'est surement le cas pour ton programme, tu ne déploies pas l'ActiveX mais juste l'interop, donc celui-ci intéroge le registre de windows et ne trouvant pas la bonne version du composant se rabat sur le composant plus récent dans le dossier d'office 2007.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
14 juin 2010 à 17:12
Mouarf, désolé pour le double-post, j'ai fais un copié/collé foireux

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
scromania Messages postés 452 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 11 janvier 2013 9
15 juin 2010 à 08:28
Bonjour,

Pas de problème pour le double post...
c'etait déjà bien de répondre car je ne trouvé pas de solution.

Pour revenir au sujet, il faut copier et écraser la dll dans "c:\....\système32" ou il faut simplement la renommer ?

Si je ne souhaite pas écraser la dll (plus récente) de Ms 2007 peut-on palier le probème en créan une clé de registre et en lui définissant l'emplacement de mon interop 2003 , puis de venir charger via l'application la clé de registre ?
0
scromania Messages postés 452 Date d'inscription dimanche 20 août 2006 Statut Membre Dernière intervention 11 janvier 2013 9
15 juin 2010 à 15:19
Merci,

Effectivement au travail nous avons visual studio pour le moment je le modifie chez moi en version express .

Je valide ta réponse et je testerais ce soir.
Bien sur je te ferais un retour positif ou négatif, dans l'attente je te remercie énormément pour toutes ces explications qui mon bien orienté.
Au moin sa ma était formateur .

Merci encore

Cyrille
0
Rejoignez-nous