IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Valeur Process.ID = 0


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 74
    Par défaut Valeur Process.ID = 0
    Bonjour,

    je rencontre un petit soucis de valeur de PID dans la situation suivante :

    mon application instancie excel, et pour fermer excel sans utiliser ce sauvage de Shell("TASKKILL /F /IM excel.exe") j'ai mis un petit ensemble de boucles pour récupérer l'id du processus excel que mon appli crée pour ne shooter que celui là.

    le problème, c'est que mon application ne semble pas voir mon processus excel après l'avoir lancé. J'ai peut être fait une erreur quelque part donc voici le code, dans la partie qui nous intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Private Sub BGW_CDX_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BGW_CDX.DoWork
            Dim XlApp As Excel.Application
     
            Dim XL_Runing As Process() = Process.GetProcessesByName("Excel") ' Liste des processus Excel en cours d'exécution
            Dim XlApp_Proces As Integer ' ID du processus Excel de cette Application
            XlApp_Proces = 0
     
            For Each Process In XL_Runing
                XlApp_Proces -= Process.Id
            Next
     
            XlApp = CreateObject("Excel.Application")
     
            For Each Process In XL_Runing
                XlApp_Proces += Process.Id
            Next
    ' ici par soustraction, XlApp_Proces devrait avoir pour valeur le PID du du processus excel en automation, or, il me renvoi "0" (Zéro)
     
    '[...] 
     
    ' et donc ici je me prends un "Accès refusé" quand je passe la commande suivante
    Process.GetProcessById(XlApp_Proces).Kill()
    [...]
    End Sub
    J'ai testé le code en laissant volontairement d'autres processus d'excel en cours, et tous les PID sont pris en compte, sauf... celle qui m'intéresse.

    A savoir également que si je demande un Process_Sart_Name = Process.StartInfo.FileName j'ai systématiquement une valeur vide ("") quelque soit le PID Excel.

    Je sèche, vu mes connaissances limitées. à Moins que ce ne soit dû à l'utilisation d'un BGW ?

    Merci d'avance pour vos tuyaux !

    @+
    Phoe

  2. #2
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Euh... J'ai déjà plusieurs tâches d'automation avec Excel derrière moi et je n'ai jamais eu à terminer le moindre process.

    Il faut juste veiller libérer convenablement les ressources et, au pire, le processus disparait du Task Manager à la fermeture de l'application (si le GC n'est pas passé par là avant).

    Pourquoi vouloir absolument killer ce process ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 74
    Par défaut
    libérer convenablement les ressources
    Ca m'a mis la puce à l'oreille, et en grattant, je me suis rendu compte que j'utilise certes une variable pour l'application excel que je libère à la fin du sub par un "= Nothing", mais bien que j'utilise aussi des variables pour mes classeurs et mes feuilles, je ne les libèrais pas, d'où je pense, mon problème.

    J'ai donc ajouté en fin de code une ligne "= nothing" pour chaque variable et cela semble fonctionner.

    En ce qui concerne le GC, j'ai lu qu'il n'est pas recommander d'en forcer le passage, donc je vais m'en abstenir.
    http://www.developpez.net/forums/d88...el-persistant/

    Merci de ces lumières, si tant est que j'ai bien interprété vos propos.

  4. #4
    Membre expérimenté
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Par défaut
    Je n'ai nullement suggérer de forcer le passage du GC.

    J'ai juste dit que, si le GC n'avais pas encore fait son boulot à la fermeture de l'application, le processus serait terminé à cet instant.

    ++

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 74
    Par défaut
    Je n'ai pas dit le contraire, je voulais juste m'assurer de cette théorie sur le GC.

    Part contre, basiquemement, le problème reste entier concernant le PID. Comment se fait-il que je je ne parvienne pas à trouver celui de mon automation ? Un erreur dans mon code où y a-t-il une subtilité comme "actualiser les processus en cours" avant ?
    Même si le problème de fermeture d'excel est résolu, je trouve intéressant de pouvoir par exemple m'assurer avant de lancer mon BGW que le fichier à utiliser n'est pas déjà ouvert par un autre processus, et ainsi éviter un plantage. Pour l'instant, je me limite à une Msgbox qui demande de fermer le fichier mais ça ne garantie pas que l'utilisateur le fera.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2012
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 74
    Par défaut
    Encore dans la quête de mes conversations non fermées, je pense pouvoir apporter ici une solution.

    Il est vrai que la raison qui me poussait à trouver l'ID du processus était mauvaise, mais sur le fond du problème, voici la théorie :

    Pour identifier une process dont on ne connaît pas l'ID, et dont on sait qu'il existe plusieurs processus du même nom, il est possible de les différencier avec l'heure à laquelle ils ont été lancés.

    Donc ici, pour retrouver l'ID du processus lancé, il suffit d'une part d'enregistrer l'heure à laquelle on lance le processus, et tout de suite après dans le code (ce qui doit correspondre à une microseconde à l'exécution du code) de rechercher, dans les processus existant, et parmi ceux ayant le même nom que celui qu'on recherche, celui qui a été lancé à l'heure que l'on a enregistré.

    Il y a en effet très peut de chance que deux processus de nom identique soit lancé à la même seconde.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Process et "net.exe" avec une valeur de retour
    Par Speed41 dans le forum C#
    Réponses: 9
    Dernier message: 16/07/2014, 14h18
  2. Régle pour definier la valeur du paramètre processes
    Par fouad77fr dans le forum Administration
    Réponses: 1
    Dernier message: 07/01/2010, 10h08
  3. Process qui doit retourner une valeur
    Par Steff2 dans le forum Delphi
    Réponses: 5
    Dernier message: 06/09/2007, 03h57
  4. [XSLT]position d'un element de valeur specifique
    Par squat dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 25/07/2002, 16h42
  5. Réponses: 2
    Dernier message: 22/07/2002, 18h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo