Supprimer la DLL Delphi qui tourne

Résolu
Messages postés
16
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
3 juillet 2008
-
Messages postés
16
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
3 juillet 2008
-
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

Messages postés
16
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
3 juillet 2008

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.
Messages postés
16
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
3 juillet 2008

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
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
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.
Messages postés
16
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
3 juillet 2008

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
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
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.
Messages postés
3827
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
16 décembre 2021
46
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
Messages postés
16
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
3 juillet 2008

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.
Messages postés
449
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
8 avril 2009
2
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 ?
Messages postés
16
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
3 juillet 2008

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
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
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.
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
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.
Messages postés
16
Date d'inscription
vendredi 20 mai 2005
Statut
Membre
Dernière intervention
3 juillet 2008

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.