none
Comment  obtenir le chemin du fichier sur lequel je double clique afin de le charger dans l'application correspondante ? RRS feed

  • Discussion générale

  • Bonjour,

    Je développe actuellement une application winform desktop dans Visual Studio Community 2017 (15.3.1)  en VB.Net. Il s'agit d'une application à instance unique.

    Mon problème est le suivant :
      1 - Je déploie cette application dans windows 10 avec un installeur Click once généré dans Visual Studio
      2 - Je double click sur un fichier dont l'extension correspond à cette application
      3 - l'application se lance bien,  mais le chemin du fichier n'arrive jamais dans le tableau de string fourni par : Environment.GetCommandLineArgs()

    Voici le code que j'utilise pour récupérer le chemin du fichier :

    Dim tbl2 As String() = Environment.GetCommandLineArgs() '
    If tbl2.Count > 1 Then
       FichierEntréSurClic = Trim(Trim(tbl2(1))) ' FichierEntréSurClic est une variable globale de type string  utilisée par Ouvrir2()
       Ouvrir2() ' chargement du fichier dans l'application
    End If

    Ce code me retourne toujours tbl2(1)="" donc pas de chemin du fichier.

    Ma question est  : comment  obtenir le chemin du fichier sur lequel je double clique afin de le charger dans l'application correspondante ?

    Merci pour votre réponse

    Guy Rochette

    dimanche 20 août 2017 10:32

Toutes les réponses


  • Bonjour Guy Rochette,
    Essayez avec le code suivant:
    Dim FichierEntréSurClic As String
    Dim tbl2 As String()
    tbl2 = Environment.GetCommandLineArgs
    If tbl2.Length > 1 Then
       FichierEntréSurClic = Environment.GetCommandLineArgs(1)
       Me.Text = FichierEntréSurClic    ' pour demonstration
    End If

    (Source: How to get filename and location of file that starts a visual basic application?)

    Cordialement,
    Nina

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    lundi 21 août 2017 09:23
    Modérateur
  • Je viens d'essayer le code que vous me soumettez : mais ça ne fonctionne pas mieux.

    Quand l'application est déployée, il n'existe pas d'index 1 à Environment.GetCommandLineArgs(). Par contre en debug/Visual Studio, il existe et l'info est fournie.

    J'émets l'hypothèse suivante : ce n'est pas la lecture de l'info qui est en cause mais le fait que sa mise à jour dans Environment n'a pas lieu  quand l'application est déployée.

    Il faudrait savoir s'il existe une condition particulière à respecter soit dans l'OS, soit dans VS, pour que cette info apparaisse.

    Je vous remercie pour votre réponse

    lundi 21 août 2017 19:34
  • Bonjour,
    Il semble que ClickOnce fonctionne d'une façon différente par rapport les arguments de ligne de commande. Consultez les threads suivants:
    Command Line Argument Problem: Drag-drop file working, double-clicking not working
    How to get command line from a ClickOnce application?
    ClickOnce application won't accept command-line arguments

    Cordialement,
    Nina

    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.


    mardi 22 août 2017 07:36
    Modérateur
  • Bonjour,

    Je ne trouve pas de solution. Je précise tout de même que ce problème est une régression car, il y a quelques temps, j'arrivais parfaitement à obtenir le chemin du fichier   dans l'argument de la ligne de commande exprimé avec le tableau de string suivant : My.Application.CommandLineArgs.ToArray. .

    Je passe à autre chose. J'essaierai de nouveau plus tard. Merci pour vos réponses.

    En conclusion et pour information, je vous donne toutes les méthodes que j'ai essayées et qui fonctionnent très sous Visual Studio (sauf la 5e) mais pas quand l'application est déployée : dans ce cas, le chemin du fichier (string) = "".

          

            ' 1ere méthode
            ' ************
            Dim tbl1 As String() = Environment.GetCommandLineArgs()
            If tbl1.Count > 0 Then
                MessageBox.Show("Méthode 1 index 0 : " + tbl1(0)) ' index = 0 --> affichage du chemin de l'application
            End If
            If tbl1.Count > 1 Then
                MessageBox.Show("Méthode 1 : index 1 " + tbl1(1)) ' index = 1 --> affichage Argument ligne de commande dans VS
            End If

            ' 2e méthode
            ' **********
            Dim tbl2 As String() = My.Application.CommandLineArgs.ToArray '
            If tbl2.Count > 0 Then
                MessageBox.Show("Méthode 2 : index 0 : " + tbl2(0)) ' index = 0 --> affichage Argument ligne de commande dans VS
            End If
            If tbl2.Count > 1 Then
                MessageBox.Show("Méthode 2 index 1 : " + tbl2(1)) ' non présent
            End If

            ' 3e méthode
            ' **********
            Dim tbl3() As String = Command().Split(" ")
            If tbl3.Count > 0 Then
                MessageBox.Show("Méthode 3 index 0 : " + tbl3(0)) ' index = 0 --> affichage Argument ligne de commande dans VS
            End If

            If tbl3.Count > 1 Then
                MessageBox.Show("Méthode 3 : index 1 " + tbl3(1)) ' non présent
            End If

            ' 4e Méthode
            ' **********
            Dim commandLineArgs = New List(Of String)()
            commandLineArgs = Environment.GetCommandLineArgs().ToList()
            If commandLineArgs.Count > 0 Then
                MessageBox.Show("Méthode 4 : index 0 " + commandLineArgs.Item(0)) ' affichage du chemin de l'application
            End If
            If commandLineArgs.Count > 1 Then
                MessageBox.Show("Méthode 4 : index 1 " + commandLineArgs.Item(1)) ' affichage Argument ligne de commande dans VS
            End If

            ' 5e Méthode
            ' **********
            Dim aa As AppDomainSetup = AppDomain.CurrentDomain.SetupInformation
            If Not (aa.ActivationArguments Is Nothing) Then
                If (aa.ActivationArguments.ActivationData.Count > 1) Then
                    MessageBox.Show("Méthode 5 : index 0 = " + aa.ActivationArguments.ActivationData(0)) ' non présent
                    MessageBox.Show("Méthode 5 : index 1 = " + aa.ActivationArguments.ActivationData(1)) ' non présent
                    Ouvrir2()
                End If
            End If

    mardi 22 août 2017 23:11