Supprimer la DLL Delphi qui tourne

Résolu
cs_EricDD Messages postés 16 Date d'inscription vendredi 20 mai 2005 Statut Membre Dernière intervention 3 juillet 2008 - 19 sept. 2006 à 14:14
cs_EricDD Messages postés 16 Date d'inscription vendredi 20 mai 2005 Statut Membre Dernière intervention 3 juillet 2008 - 18 déc. 2006 à 14:35
Bonjour,

Je ne vois pas de question sur ce thème, pourtant cela doit arriver à tout le monde :
Quand vous arrivez avec une nouvelle version de votre DLL comment faites-vous pour supprimer celle qui tourne ?
La plupart du temps elle est occupée, et il faut attendre un temps infini pour que la DLL soit disponible. J’ai fini par arrêter le PC pour libérer les buffers. Mais il doit y avoir un autre système, non ? Un logiciel ou une fonction système ?



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Merci

 Eric DD
Paris

12 réponses

cs_EricDD Messages postés 16 Date d'inscription vendredi 20 mai 2005 Statut Membre Dernière intervention 3 juillet 2008
18 déc. 2006 à 14:35
J'ai résolu mon pb de la manière suivante :

Sur le gestionnaire de composants COM+ :
-Sélectionner la DLL Delphi
-Clic droit : Stop
-Clic droit : Disable

La DLL est libérée. On peut la supprimer ou la renommer.

-Clic droit : Enable
-Clic droit : Run

La DLL fonctionne à nouveau.
3
cs_EricDD Messages postés 16 Date d'inscription vendredi 20 mai 2005 Statut Membre Dernière intervention 3 juillet 2008
19 sept. 2006 à 16:46
Merci Loda de ton aide.

Mais je fonctionne en Delphi 5 et le code intéressant que tu me proposes fonctionne avec Delphi 7.

Et la recherche indiquée ne me donne rien.

Je continue à chercher...

Eric DD
Paris
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
19 sept. 2006 à 18:57
Salut,

Une première méthode très simple mais pas trops dans l'esprit, tu peut mettre la dll dans le même répertoire que l'exe. A chaque exe sa dll...

A partir du moment ou tu fournis une dll (à mettre dans system32 par ex) et un exe, c'est quand même mieux d'utiliser un générateur d'installeur. La majotrité d'entre eux sont capable de remplacer une dll utilisée.

Je te conseil Inno Setup qui le fait ("replace in-use files"). Ce logiciel est gratuit, très complet, sans pub, et vraiment simple d'apprentissage...

@+
<hr size="2" width="100%" />Je suis en deuxième année en école d'ingénieur etpassionné de développement logiciel sous D7 et VB6. Je cherche un stage en entreprise sur Paris de début avril à fin juillet 2007.
0
cs_EricDD Messages postés 16 Date d'inscription vendredi 20 mai 2005 Statut Membre Dernière intervention 3 juillet 2008
20 sept. 2006 à 09:58
Salut rt15,

en fait je travaille avec une appli ecommerce en asp, qui fait appel à une DLL Delphi, enregistrée comme composant COM+  : Je n'ai pas d'exe.

Je suis arrivé sur cette appli sans connaître Delphi. Et personne ici ne connaît.

Je suis en train de déboguer et de faire évoluer cette appli. Et cela nécessite de compiler souvent la DLL Delphi pour pouvoir déboguer. Et je suis bloqué par le fait que je ne peux pas supprimer l'ancienne version tant que la DLL n'est pas déchargée de la mémoire. La DLL n'est pas dans System32, mais dans un répertoire de l'appli. J'ai essayé avec Regcleaner, mais ce logiciel ne la voit pas.

Inno Setup peut-il m'aider dans ce cas ?

En fait je cherche un logiciel capable de me vider les buffers, pour que je ne sois pas obligé de rebooter mon serveur à chaque fois que je veux tester ma DLL....

Eric DD
Paris
0

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

Posez votre question
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
20 sept. 2006 à 12:12
Apparement,un utilitaire de chez Redmond fait ça : Inuse (A utiliser en inviteDOS).

Vala des explications, et le mode d'emploi.

<hr size="2" width="100%" />Je suis en deuxième année en école d'ingénieur etpassionné de développement logiciel sous D7 et VB6. Je cherche un stage en entreprise sur Paris de début avril à fin juillet 2007.
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
20 sept. 2006 à 12:22
Salut,
Même Windows ne fait pas autrement quand tu fais une mise à jours, certaine Dll qui sont en cours d'utilisation, ne sont pas remplacée de suite mais marquée comme tel pour être éffectué au prochain Reboot ... 
tu n'as pas d'autre choix que de redémarrer le PC

Extrait du mode d'emploi d'InUse:
"Remplace les fichiers verrouillés du système d'exploitation. Les fichiers spécifiés ne sont remplacés que lors du redémarrage du système d'exploitation."

@+
Cirec
0
cs_EricDD Messages postés 16 Date d'inscription vendredi 20 mai 2005 Statut Membre Dernière intervention 3 juillet 2008
20 sept. 2006 à 13:11
Merci de vous pencher sur mon cas.

Un collègue m'a installé Advanced Process Manipulation. On voit ma DLL, mais impossible de la décharger. Et même quand on y arrive (on ne la voit plus dans les process), elle est toujours insupprimable.

Au bout d'un certain temps (et même un temps certain), sans redémarrer le PC, la DLL devient accessible et on peut la supprimer.
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
20 sept. 2006 à 13:55
Mais t'as Delphi 5 d'installé, non ? Normalement la présence de delphi sur la machine suffit a modifier une ligne de la registry qui décharge les dll de la mémoire dès la fin du programme appelant....

Ou bien me goure-je ?

T'as le source de cette dll ?
0
cs_EricDD Messages postés 16 Date d'inscription vendredi 20 mai 2005 Statut Membre Dernière intervention 3 juillet 2008
20 sept. 2006 à 14:54
Bonjour DeltaFX.


Delphi est utilisé juste pour le développement. Je n'ai pas Delphi sur le serveur où s'exécute la DLL.

Le projet Delphi comporte 21 unités qui font des requêtes SQL sur une base distante. Je ne vais pas te donner tous les sources... Mais il y a peut-être une option de compilation qui permet de décharger la DLL après exécution ?

Source de la page Main :

library Commerce;


%File 'k_INSERT_Mail_PWD'}


uses
  ComServ,
  Commerce_TLB in 'Commerce_TLB.pas',
  ADODB_TLB in 'ADODB_TLB.pas',
  u_Authentication in 'Unite\u_Authentication.pas' {Authentication: CoClass},
  u_Banniere in 'unite\u_Banniere.pas' {Banniere: CoClass},
  u_Client in 'unite\u_Client.pas' {Client: CoClass},
  u_Commande in 'unite\u_Commande.pas' {Commande: CoClass},
  u_Constante in 'unite\u_Constante.pas',
  u_FicheConso in 'unite\u_FicheConso.pas' {FicheConso: CoClass},
  u_HitParade in 'unite\u_HitParade.pas' {HitParade: CoClass},
  u_ListePerso in 'unite\u_ListePerso.pas' {ListePerso: CoClass},
  u_Livraison in 'unite\u_Livraison.pas',
  u_Mail in 'unite\u_Mail.pas' {Mail: CoClass},
  u_MajAUO in 'unite\u_MajAUO.pas' {MajAUO: CoClass},
  u_Md5 in 'Unite\u_Md5.pas',
  u_Menu in 'unite\u_Menu.pas' {Menu: CoClass},
  u_Paiement in 'unite\u_Paiement.pas' {Paiement: CoClass},
  u_Panier in 'unite\u_Panier.pas' {Panier: CoClass},
  u_personalization in 'Unite\u_personalization.pas' {Personalization: CoClass},
  u_Produit in 'unite\u_Produit.pas' {Produit: CoClass},
  u_Recette in 'unite\u_Recette.pas' {Recette: CoClass},
  u_Recherche in 'unite\u_Recherche.pas' {Recherche: CoClass},
  u_Statique in 'unite\u_Statique.pas' {Statique: CoClass},
  u_Tool in 'unite\u_Tool.pas';


exports
  DllGetClassObject,
  DllCanUnloadNow,
  DllRegisterServer,
  DllUnregisterServer;


{$R *.TLB}


{$R *.RES}


begin
end.

Merci
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
20 sept. 2006 à 18:42
Ah zut, je le sentais vraiment bien mon Inuse.

La clé dont parle DeltaFX, ce serait apparement celle ci :


Puis HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer

Il faudrait y créer une valeur DWORD AlwaysUnloadDll et lui donner la valeur 1.

<hr size="2" width="100%" />Je suis en deuxième année en école d'ingénieur etpassionné de développement logiciel sous D7 et VB6. Je cherche un stage en entreprise sur Paris de début avril à fin juillet 2007.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
20 sept. 2006 à 23:00
Dans l'aide en ligne de Delphi (Guide du développeur : Développement d'applications COM) à la rubrique "Recensement d'un objet COM", on peut lire ceci :
"Remarque



Pour retirer l'objet COM de votre système, vous devez commencer par annuler son recensement.




Recensement d'un serveur en processus




Pour recenser un serveur en processus (DLL ou OCX) :



Choisissez Exécuter|Recenser le serveur ActiveX.



Pour annuler le recensement d'un serveur en processus :



Choisissez Exécuter|Dérecenser le serveur ActiveX.




Recensement d'un serveur hors processus




Pour recenser un serveur hors processus :



Exécutez le serveur avec l'option de ligne de commande /regserver.
 Pour spécifier les options de la ligne de commande, utilisez la boîte de dialogue Exécuter|Paramètres.
 Vous pouvez également recenser le serveur en l'exécutant.




Pour annuler le recensement d'un serveur hors processus :





Exécutez le serveur avec l'option de ligne de commande /unregserver.




Vous pouvez également utiliser la commande tregsvr depuis la ligne de commande ou exécuter regsvr32.exe depuis le système d'exploitation.



Remarque



Si le serveur COM doit fonctionner dans COM+, vous devez l'installer dans une application COM+ au lieu de le recenser. L'installation de l'objet dans une application COM+ se charge automatiquement du recensement. Pour des informations sur la manière d'installer un objet dans une application COM+, voir Installation des objets transactionnels."



C'est évidemment la partie ne caractères verts qui t'intéresse le plus.
Bonne continuation.

May Delphi be with you !


<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
0
cs_EricDD Messages postés 16 Date d'inscription vendredi 20 mai 2005 Statut Membre Dernière intervention 3 juillet 2008
25 sept. 2006 à 09:54
Merci DelphiProg.

Je suis allé voir l'aide en ligne de Delphi. Mais pour l'instant je n'ai pas encore résolu mon problème. Même quand je désactive le composant COM+ et que j'arrête IIS, je ne peux supprimer ma DLL.

A l'étude des sources ASP, je crois que le problème vient du fait que l'objet COM est ouvert, mais pas refermé. Je vais chercher en ce sens.

Merci à tous de votre aide.
0
Rejoignez-nous