begin process at 2012 02 17 11:15:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Trucs & Astuces

 > ISOLATOR - SIMPLIFICATION DU DÉPLOIEMENT ET ÉLIMINATION DE "L'ENFER DES DLL"

ISOLATOR - SIMPLIFICATION DU DÉPLOIEMENT ET ÉLIMINATION DE "L'ENFER DES DLL"


 Information sur la source

Note :
9,67 / 10 - par 3 personnes
9,67 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Trucs & Astuces Classé sous :manifest, isolator, isolement, regsvr32, activex Niveau :Initié Date de création :21/10/2008 Date de mise à jour :04/03/2010 09:10:34 Vu / téléchargé :4 911 / 438

Auteur : Renfield

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note


 Description

Cliquez pour voir la capture en taille normale
Bonjour,

Cette application a pour but de supprimer tout besoin d'enregistrement des ActiveX en base de registres.

Reprenons en détail.

Vous savez surement qu'il existe en gros deux sortes de Dll.
Les Dll dites classiques (d'API) et les Dll ActiveX.

Ces dernières permettent d'exporter des classes. Vous avez surement déjà utilisé des objets tels que :
- Scripting.FileSystemObject
- Excel.Application
- VbScript.RegExp
- ...

Toutes ces classes sont issues de la technologie COM ActiveX.

Une classe est caractérisée par le nom de sa librairie (ex: Scripting) et le nom de la classe (FileSystemObject).
Lorsque vous faites par exemple, en VbScript :

Set oFSO = CreateObject("Scripting.FileSystemObject")

que se passe-t'il ?

Le moteur de script va chercher dans la base de registres.
observons:
HKEY_CLASSES_ROOT\Scripting.FileSystem Object
nous y trouvons un identifiant globallement unique, le CLSID (Class ID) qui est donc :
HKEY_CLASSES_ROOT\Scripting.FileSystemObject\CLS ID = {0D43FE01-F093-11CF-8940-00A0C9054228}

Ok, "Scripting.FileSystemObject" permet de trouver le CLSID...
Qu'en faire ?

Et bien toujours en base de registres :
HKEY_CLASSES_ROOT\CLSID\{0D43FE01-F093-11CF-8940 -00A0C9054228}
Cette clé possède la clé InprocServer32 qui permet enfin de faire le lien avec le fichier .dll :

HKEY_CLASSES_ROOT\CLSID\{0D43FE01-F093-11CF-894 0-00A0C9054228}\InprocServer32 = C:\WINDOWS\system32\scrrun.dll

En fait, lorsque vous enregistrez vos Dll (Via RegSvr32 le plus souvent) ; ce sont toutes ces informations qui sont inscrites en base de registres. Tout ce qui permettra de passer de "Scripting.FileSystemObject" à un nom de dll et un identifiant de la classe à instancier.

Bon, ça c'est pour le Late-Binding (liaison tardive) ; c'est à dire en utilisant le nom de la classe comme point de départ.

Il existe également le Early-Binding qui est en fait simplement le contraire. C'est ce que vous observez dans les langages compilés tels que VB6 (par exemple). En effet, dans les references de votre projet, vous pouvez lier ce dernier à un certain nombre de Dll ActiveX. Dans le projet, par la suite et dans l'executable que vous générez, il est directement inscrit le CLSID, ce qui réduit le nombre de recherches en base de registres. Sans compter que là, les objets sont typés, pas déclarés en tant que 'As Object'... Du coup, l'execution est un brin plus lente, VB n'ayant pas a s'assurer que telle ou telle fonction existe...


Revenons à nos moutons...


Microsoft, avec Windows 2000 à introduit les fichiers .manifest.
Il s'agit d'un simple fichier XML, permettant de spécifier certaines infos qui prévallent sur ce qui pourrait être trouvé en base de registres.
Pour un executable nommé Project1.exe, le manifest correspondant se nommera donc Project1.exe.manifest

Vous avez surement entendu parler de ces fichiers pour appliquer le thème de Windows à vos applications.
C'est exactement le même phénomène. On précise en fait que l'on souhaite remplacer le lien vers la Dll des controles communs par la version 6.0 de cette Dll, gérant le thème Windows.


L'application que je vous présente ici permet de générer des fichiers manifest pour rendre inutile l'enregistrement de vos ActiveX.
Concrêtement, un manifest pour l'executable va identifier les Dll ActiveX requises. Un second fichier manifest (en fait, un par ActiveX) sera créé, pour lister les classes exportées.

Ainsi, lorsque Windows va charger l'application, il va regarder si un fichier manifest est présent. Il va le charger s'il le faut, et placer toutes ces règles en mémoire.
Ainsi, lorsqu'il lui sera demandé la classe "Test.Class1" (ou via son CLSID), Windows saura faire le lien avec la dll, grâce au manifest. Pas besoin d'aller fureter en base de registres, donc.

à noter que le manifest peut etre intégré directement aux .exe (dans ses ressources).

Cela vous permet donc de simplement 'poser' la dll dans le repertoire de l'application, sans passer par la case RegSvr32. Rappelons que cette opération requiert bien souvent les droits administrateur... Cela devient donc bien intéressant...


 Conclusion

Voir exemple dans le dossier Sample.
En renommant correctement les fichiers (.ex_ => .exe  .dl_ => .dll)
Et en les chargeant dans l'application "Isolator" vous pourrez générer les fichiers d'isolement ".manifest" qui vous permettrons de lancer Project1.exe (lequel requiert la dll) sans avoir a enregistrer l'ActiveX...

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

03 mars 2010 17:26:02 :
Ajout d'une interface a l'outil
04 mars 2010 09:10:35 :
Ajout d'un p'tit blabla en introduction de la source.

 Sources du même auteur

Source avec Zip Source avec une capture ENUMERATION DES PORTS TCP ET IDENTIFCATION DU PROCESS (PID) ...
Source avec Zip Source avec une capture JSON PARSER - ANALYSE DE CHAINES JSON
Source avec Zip Source avec une capture MODULE DE TÉLÉCHARGEMENT DE FICHIER BASIQUE (SYNCHRONE / ASY...
Source avec Zip COURS DE PILOTAGE........D'APPLICATIONS
Source avec Zip CSOCKET - REMPLACEZ WINSOCK PAR LA VERSION 2 DES API

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) EXPORTER LES IMAGES DE WORD ET D' EXCEL par Le Pivert
Source avec Zip Source avec une capture JEUX DE VERITÉ ET DE FIDELITÉ par billatosco
Source avec Zip IMAGELOARDER par vkitumaini
Source avec Zip Source avec une capture Source .NET (Dotnet) CREER UN CALENDRIER DE POCHE par Le Pivert
Source avec Zip RECHERCHE D'UN ENREGISTREMENT DANS UNE DATATABLE ET POSITION... par erdna

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture [VB6 - ACTIVEX] RGWEATHER - LA MÉTÉO SIMPLEMENT DANS VOS APP... par magicgus
Source avec Zip Source avec une capture [VB6 - ACTIVEX] MAGICBOX OU BOITE À CONTROLS... par magicgus
Source avec Zip Source .NET (Dotnet) INSTALL DLL OCX ( ACTIVEX ) par gillardg
Source avec Zip Source avec une capture REG ACTIVEX [ENREGISTRE LES FICHIERS .OCX] par noxious
Source avec Zip REGOCX: UN REGSVR32 EN VISUAL BASIC par FlyKiller

Commentaires et avis

Commentaire de Renfield le 21/10/2008 07:16:47 administrateur CS

nb. On peut également fournir la liste des fichiers à 'isoler' dans les arguments de ligne de commande.
nb.2. La liste des fichiers à traiter peut contenir des fichiers .isolate également: possibilité d'inclure des listes.

le but de cette source ?
elle permet de rendre autonome un projet : pas de lien vers les fichiers dll via la registry ; on peut déplacer les fichiers dll comme bon nous semble.
En l'occurrence, j'ai un projet, composé d'Exes et de Dll diverses. Nous sommes cinq a devoir l'utiliser simultanément. mais j'ai ajouté un Launcher, qui va crééer une copie perso du lot de fichier pour chaque utilisateur ; afin de faciliter l'intégration de nouveautés/correctifs.

Au démarrage, le Launcher fait sa propre copie privée, recréé les .manifest et lance la version perso de l'outil.

les fichiers d'origine ne sont donc jamais utilisés directement, je peux les mettre a jour sans avoir à faire quitter chaque utilisateur.

Commentaire de sethlaerce le 16/12/2008 10:29:17 10/10

Ah! Renfield à encore pondu du béton!
Comment fais tu pour être aussi Fort?
Sans même l'avoir regarder je dis que l'idée est géniale.
10 carrément!

Commentaire de PROGRAMMIX le 31/12/2008 16:08:00

Bonjour

Je viens de découvrir cette source et son explication.

J'ai bien l'impression que c'est le genre de truc à posséder...

Mais ne connaissant pas ces fichiers ".manifest", quelqu'un pourrait-il faire un tuto là-dessus ?

Petite question, est-ce que grâce à cela, on pourrait trimballer ses programmes VB sur une clé USB et les utiliser sur "n'importe quel" PC ?

Commentaire de PROGRAMMIX le 31/12/2008 16:08:22

J'oubliais...  Bonne année à tous.

Commentaire de Renfield le 31/12/2008 16:16:08 administrateur CS

dans l'absolu, cela doit être possible, en effet.

en gros, depuis Windows 2000 (ou juste Xp ?)
on peut placer un fichier manifest en resources d'un executable (type 24)
ou dans le même repertoire, avec nomDuFichier.exe.manifest

ca permet de forcer Windows a charger une version données des dll lorsq'uil a besoin de faire appel a des composants exterieurs.

ca fait un point d'entrée avant la base de registres, en quelques sortes.

du coup, pas besoin de registrer les dll/ocx...

voili voilou

Commentaire de PROGRAMMIX le 31/12/2008 16:28:04

Merci pour la réponse.

Sais-tu si des tuto sur le sujet existent ?

Te sens-tu d'attaque pour en faire un ?

Je sais qu'en cherchant, je devrais trouver... mais ayant plusieurs trucs sur le feu en même temps, j'ai peu de temps à consacrer à la "recherche" pour le moment.

Commentaire de VBsearch le 26/08/2009 02:40:41

Voici un lien
http://www.vbfrance.com/tutoriaux/INSTALLATION-SANS-INSTALLATION-AVEC-MANIFEST_240.aspx

Commentaire de GeneticW le 03/03/2010 05:31:15

Reinfield...  tu fais d'ordinaire d'excellent traveaux et meme plus... mais cette fois ci, je suis un peu surpris... :(
pas d'exemple d'utilisation avec un "faux" projet pour que l'on comprenne bien, pas de données sur la SYNTAXE d'utilisation ?

je suis un peu déçu.  Je vais devoir lire le code en entier et le comprendre avant même de savoir si ca m'est utile.

Commentaire de Renfield le 03/03/2010 08:34:22 administrateur CS

tu as pas forcément tord.

je revois ma copie dnas la matinée

Commentaire de Renfield le 03/03/2010 17:27:52 administrateur CS

fait. c'est plus sympa ainsi

a peaufiner, ce n'est qu'un premier jet rapide

Commentaire de PCPT le 03/03/2010 18:59:24 administrateur CS

Renfield -> tu dev sur un VB6 anglais?
WX pro fr SP3 : référence à TINFO232.DLL manquante

+ les left mid etc.. non-reconnus sans être précédés de "VBA." (çà faisait longtemps que j'avais pas eu le tour)

solution :
fermer le projet sans sauver
mettre dans system32 :
http://www.dofiles.reohix.com/DLL%20Files/T-V/tinfo232.dll
l'enregistrer
relancer le projet

tout OK (même les lefts right etc)


très clair avec le projet exemple, code à garder précieusement sous le coude

++

Commentaire de Renfield le 03/03/2010 19:04:04 administrateur CS

IDE en british au boulot, oui...

pas fait gaffe aux references, désolé, elle sert peut etre pas ....

pour les left et mid, pas eu le tour sur ce projet, c'est une sorte de confusion entre les references.

Commentaire de PCPT le 03/03/2010 19:19:10 administrateur CS

exact, seul TLBINF32 est nécessaire

pas grave... ;)

Commentaire de GeneticW le 04/03/2010 23:41:28

Bon attend je comprends plus la...
au debut, tu reprends la source d'un autre en GUI et tu fais une app console avec... ce qui est bien.  Mais tu donne pas la syntaxe d'utilisation de l'app console ou d'exemple de comment on l'utilise... genre prenez un fichier .ini, mettez dedans le chemin des fichier blabblba... (c'est ce que j'ai cru comprendre)
bon.. donc je demande un exemple d'utilisation et tu nous largue un app GUI ?
Bon je peut pas me pleindre la... un GUI c'Est bien...
mais un exemple d'utilisation de l'app console etait suffisant!  
Dans tout les cas, bon travail, je vais regarder cela.
La seul truc qui me chicotte c'est...  Comment ca se fait que Microsoft a pas sortie un truc du genre ?  je sais qu'il en ont fait un recemment avec .NET... mais ils ont pas une version anterieure ?

Commentaire de GeneticW le 04/03/2010 23:42:03

Tu as surement réparer la source parce que chez moi ca compile sans les probleme ci haut mentionné.

Commentaire de Renfield le 05/03/2010 07:35:20 administrateur CS

euh, si, en fait c'etait en mode console, mais la syntaxe etait donnée dans la parie 'source' de la desc de la source (ici, quoi)
fallait lui donner ce genre de choses :

Project1.exe
> Test.dll


Micosoft se fiche de VB6, tu sais... ils ont pondu les manifest pour .Net, principalement...
ca leur permettait de dire qu'avec .Net, finit le Dll Hell

pourtant cette techno est compatible avec VB6, la preuve ^^


Commentaire de tola le 19/03/2010 10:04:03 10/10

Géant ! Pas besoin d'autres mots, l'utiliser c'est l'adopter ! Pour quelqu'un comme moi qui jongle entre différents langages de programmation, qui utilise beaucoup d'utilitaires d'administration réseau & système et qui souhaite se simplifier la vie, alors même si je sait faire mes fichiers 'manifest' 'à la main', je préfère utiliser cet utilitaire !

Commentaire de Philippe734 le 16/08/2010 23:46:00 9/10

Bravo, c'est génial.
Si je ne me trompe pas, cet outil permet de rendre vraiment "portable" n'importe quel programme vb6 avec pleins de dépendances DLL/OCX ? Peux tu confirmer master renfield ?

Commentaire de Philippe734 le 18/08/2010 18:44:52

ok... tu as déjà répondus oui à la question plus haut... :-)

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Fichier Manifest pour les exe OK... Mais pour les ocx ? [ par lcprog ] Bonjour, j'ai développé un contrôle activeX qui s'appuie en partie sur la dll gdiplus de Microsoft. Mon contrôle ActiveX ne fonctionne qu'avec la dern chargemenr d'activeX, alternative a regsvr32.exe [ par g0belin ] Bonjour, je voudrai charger directement un activeX dans le code sans passé par regsrv32.exe. Je cherche une altérnative.Merci d'avance Paramètres pour ActiveX ... [ par yearling ] Bonjour à tous, en fait, j'ai un petit souci au niveau de la création d'un ActiveX. Dans le cadre de mon site web, j'aimerais bien appeler un ActiveX Installation d'une dll [ par CrisseTof ] Bonjour,J'aimerais installer une dll (vba6.dll) qui se trouve à l'adresse :C:\Progra~1\Micros~2\VB98J'ai tapé "RegSvr32 C:\Progra~1\Micros~2\VB98\vba6 tableau croisé dynamique ou activeX???? [ par prezz ] rebonjour alors voila mon nouveau probleme : j'ai fait un tableau croisé dynamique a partir de l'assistant d'access. Ce tableau ne se tient pas du tou Erreur ActiveX 429 [ par samus_mes_zamus ] J'ai implanté un programme en VBA/Excel sur un autre poste que le mien. Lorsque je clique sur un des boutons (qui sert à ouvrir un CommonDialog), l'er activex [ par voiladoncun ] salut les amis est ce que quelqu'un a l'ocx animgif.ocxmerci ! Base de registre ou service Windows [ par samus_mes_zamus ] Où pourrais-je trouver l'endroit où se cré les activeX CommonDialog?Parce que j'ai une erreur 429 et j'ai cherché un peu partout, que ce soit d'active Decompiler un ACTIVEX [ par nagattaque ] Bonjour, juste pour savoir s'il y a un moyen de décompiler un fichier ActivX pour voir ce qu'il y a derrière ?merci d'avance...<img src=/imgs2/smile_t Directx Activex [ par bilaloch ] Salut,Je me demander si on peu dans un controle activex utiliser directx.Merci@plus


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,700 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales