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

Framework .NET Discussion :

Problème avec ProcessStartInfo : bug ?


Sujet :

Framework .NET

  1. #1
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut Problème avec ProcessStartInfo : bug ?
    Salut,
    Je voulais faire un truc a priori assez simple, mais je suis tombé sur un os... Je veux lancer un process en définissant son ProcessStartInfo via une PropertyGrid. Rien de bien compliqué en principe, mais il y a à mon avis un gros bug dans le framework... quand je mets la propriété UseShellExecute à true, au lancement du process j'ai l'erreur suivante :
    InvalidOperationException : Pour utiliser des variables d'environnement, l'objet Process doit avoir une propriété UseShellExecute ayant la valeur false.
    Or, je n'ai pas défini de variables d'environnement explicitement... Je me suis même assuré que la propriété EnvironmentVariables était une liste vide, mais ça ne suffit pas.

    Pour essayer de comprendre le problème, j'ai regardé le code de Process et ProcessInfo avec Reflector. Voilà ce que j'ai trouvé :

    - Cette exception est levée quand le champ (internal) environmentVariables de ProcessStartInfo est différent de null :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (startInfo.environmentVariables != null)
    {
        throw new InvalidOperationException(SR.GetString("CantUseEnvVars"));
    }

    - Par défaut, à la création du ProcessStartInfo, ce champ est nul

    - Il est initialisé dans le get de EnvironmentVariables, qui lui ajoute toutes les variables d'environnement du process en cours :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public StringDictionary EnvironmentVariables
    {
        get
        {
            if (this.environmentVariables == null)
            {
                this.environmentVariables = new StringDictionary();
                // ...
            }
            return this.environmentVariables;
        }
    }

    Quand la PropertyGrid affiche les données du ProcessStartInfo, elle fait appel à la propriété EnvironmentVariables, ce qui initialise environmentVariables. Et il n'y a plus moyen de remettre ce champ à null (la propriété est en lecture seule). Donc plus moyen de lancer un process avec ShellExecute

    A mon avis, le test dans la classe process devrait plutôt tester si environmentVariables est null OU vide...

    Pour ceux qui ont eu la patience de lire jusque là : auriez-vous une idée pour contourner le problème ?

    Merci !

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Tu es obligé d'utiliser un objet ProcessStartInfo ou tu peut mettre ce que tu veux ? Il serait plus simple de créer ta propre classe contenant les différents paramètres requis pour lancer un processus et créer le ProcessStartInfo en dernier, juste avant d'appeler Process.Start. Ainsi, pas de crash ...
    d'ailleurs j'ai des crash à revendre, si vous z'en voulez

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Oui, je vais faire comme ça, mais j'aurais préféré éviter d'ajouter une classe qui ne sert qu'à ça...

    Citation Envoyé par smyley
    d'ailleurs j'ai des crash à revendre, si vous z'en voulez
    Ouais, je collectionne

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bon, je marque comme résolu... mais je pense quand-même qu'il y a un sérieux problème de conception à ce niveau : le fait de lire la valeur d'une propriété ne devrait pas modifier le comportement

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

Discussions similaires

  1. [DateTime] Problème avec __construct() => BUG PHP
    Par boo64 dans le forum Langage
    Réponses: 2
    Dernier message: 22/11/2012, 17h45
  2. Problème avec sfDataGridPlugins : bug avec les actions
    Par amalec78 dans le forum Plugins
    Réponses: 0
    Dernier message: 05/01/2011, 16h51
  3. Problème avec fscanf, bug ?
    Par alainlc dans le forum Bibliothèque standard
    Réponses: 10
    Dernier message: 27/03/2008, 16h54
  4. Problème avec JFileChooser (BUG ?)
    Par vano dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 05/05/2006, 09h03
  5. [BUG]problème avec les outils
    Par Maxoo dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 7
    Dernier message: 22/04/2006, 09h52

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