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

Windows Forms Discussion :

[VB.NET]Lancement d'un programme tiers


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 28
    Points : 16
    Points
    16
    Par défaut [VB.NET]Lancement d'un programme tiers
    Bonjour.

    J'appelle un executable extérieur à mon application via la commande Shell:

    où strCommandLine est un String contenant, par exemple: "c:\program files\toto\toto.exe /option1 /option2"

    Le programme se lance sans problème et les options sont bien activées, mais le dossier de démarrage est celui de mon appli et non celui de toto.exe, ce qui cause un plantage lorsque ce dernier cherche ses ressources suivant un chemin relatif. J'ai essayé de mettre mon application dans le même dossier que cet exe tiers, et là, tout va bien.

    Y a-t'il un moyen de spécifier à la commande Shell (ou à tout autre système de lancement d'un exe externe) dans quel dossier l'exécution doit démarrer?

    J'ai envisagé de créer un raccourci à la volée à cet effet, mais le moins que l'on puisse dire, c'est que ce n'est pas très éléguant.

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Lis ceci puis regarde ceci. Normallement, tu devrais pouvoir te débrouiller avec ça

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Points : 132
    Points
    132
    Par défaut
    Tu es sur que tu mets le bon chemin ?
    Le problème doit se situer ici.

    Pour commencer essaye de doubles les anti slash ("C\\Program Files\\Toto\\Toto.exe option1 option2")

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Points : 132
    Points
    132
    Par défaut
    Le Shell execute l'application là ou elle se trouve.
    Il ne fait pas de copie de l'application a lancé dans le répertoire d'exécution.

    Ou alors il est extrêment c**...

  5. #5
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par 0xYg3n3
    Tu es sur que tu mets le bon chemin ?
    Le problème doit se situer ici.

    Pour commencer essaye de doubles les anti slash ("C\\Program Files\\Toto\\Toto.exe option1 option2")
    Il travaille en VB.Net, et en VB.Net le doublage des anti-slash est inutile

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    201
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 201
    Points : 132
    Points
    132
    Par défaut
    Citation Envoyé par StormimOn
    Il travaille en VB.Net, et en VB.Net le doublage des anti-slash est inutile
    Effectivement
    Mais bon, je n'ai pas connaissance que le Shell fait une copie local de l'application a lancé.

    Un passage par la classe Process, peut s'avérer intéressant.
    C'est un peu long que de passer par les commandes Shell, mais au moins on est sur du résultat.

  7. #7
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Citation Envoyé par 0xYg3n3
    Mais bon, je n'ai pas connaissance que le Shell fait une copie local de l'application a lancé.
    Ce n'est pas le cas. Le problème qui se passe c'est un peu comme si tu lançais la commande suivante depuis par exemple C:\
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\rep1\rep2\monAppli.exe
    Le répertoire de travail sera, il me semble, C:\ et non C:\rep1\rep2\. Résultat, si l'application recherche des ressources en se basant sur le fait que l'on soit dans le répertoire de l'application (avec des accès relatifs du style .\Resources) tout tombe à l'eau

  8. #8
    Membre à l'essai
    Inscrit en
    Janvier 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Excellente description du problème, StormimOn.

    J'ai lu ce que vous m'avez suggéré de lire et je pense qu'en effet, cela devrait corriger le problème. J'ai déjà corrigé mon code en conséquence, mais je n'ai pas encore pu l'envoyer à mon testeur (je ne possède pas le fameux "toto.exe"). Donc je ne sais pas encore si ça marche...

    Quoi qu'il en soit, merci.

  9. #9
    Membre à l'essai
    Inscrit en
    Janvier 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Bon, j'ai essayé de me créer un faux programme "toto.exe" (en vb6, il lit un fichier texte placé dans son propre dossier => "app.path" en vb6) pour tester mon code VB.NET. Et ça marche. Hélas, chez mon testeur, avec le vrai programme cible, patatra. Résumé de la situation:

    Chez moi:
    le programme cible: "totoVB6.exe" lit correctement test.txt dans son dossier, quel que soit l'emplacement de mon programme appelant.

    Chez le testeur:
    le programme cible "toto.exe" ne lit correctement ses ressources que si mon programme appelant se trouve dans le même dossier que lui, faute de quoi, il indique que des fichiers sont introuvables...

    Je suis un peu largué, mais il parait que la nuit porte conseil...

    [edité]En fait, le prog VB6 se fiche complètement du dossier de démarrage, "app.path" semble toujours pointer vers le dossier de l'exe, même si un raccourci le fait "démarrer dans" un autre dossier. Mon test à domicile n'apporte donc pas grand'chose. Je m'y remets.[/édité]

  10. #10
    Membre à l'essai
    Inscrit en
    Janvier 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Bon, j'ai essayé ceci (en simplifiant un peu, bien sûr):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Dim MonProcess As New Process
     
            MonProcess.StartInfo.WorkingDirectory = "c:\program files\toto"
            MonProcess.StartInfo.Arguments = "/option"
     
            MonProcess.Start("c:\program files\toto\toto.bat")
    J'ai utilisé un batch au lieu d'un exe, parce que là au moins, je suis sûr qu'il ne va pas fonctionner si le dossier de démarrage ne lui convient pas, pas comme VB6. Et cela ne marche pas, le batch essaie de trouver ses chemins relatifs dans "C:\Documents and Settings\Administrateur.TITANIUM\Mes documents\Visual Studio Projects\TotoStarter\bin", à savoir l'emplacement de mon executable dotnet appelant. Ai-je commis une boulette en utilisant la classe Process?

    Je continue à chercher, si quelqu'un a une suggestion...

Discussions similaires

  1. VB.net et programme tiers
    Par BlackAlpha dans le forum VB.NET
    Réponses: 4
    Dernier message: 05/08/2013, 15h03
  2. [VB.NET]Lancement auto d'une appli
    Par smyley dans le forum Windows Forms
    Réponses: 14
    Dernier message: 25/04/2006, 09h50
  3. [VB.NET]Lancement d'un programme que s'il n'est pas lancé
    Par cyrcroix dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2005, 15h05
  4. Lancement d'un programme java depuis un script php
    Par gexti dans le forum Développement Web en Java
    Réponses: 8
    Dernier message: 07/05/2004, 18h40

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