2009-08-16 11 views
0

j'ai référencé ce fil et le site web, il pointe vers: Opening a file in my application from File ExplorerMy.Application.CommandLineArgs - peuvent ouvrir le fichier

A partir de maintenant, je ne peux pas My.Application.CommandLineArgs pour fonctionner correctement. Chaque fois que je sélectionne un fichier à ouvrir dans mon programme, j'obtiens une erreur Windows forçant le programme à se fermer. Je veux seulement obtenir le chemin du fichier de My.Application.CommandLineArgs et le passer à une fonction qui analysera ensuite le fichier (un fichier texte de diverses extensions, même si elle n'est pas associée à mon programme) et afficher le contenu dans un RichTextBox. Ma fonction pour ouvrir le fichier est terminée et fonctionne, mais si j'essaie d'utiliser My.Application.CommandLineArgs sur un fichier, le programme se bloque immédiatement. est le code que je suis en train comme un test ici:

Private Sub ParseCommandLineArgs() 
    If My.Application.CommandLineArgs.Count > 0 Then 
     MessageBox.Show(My.Application.CommandLineArgs(0)) 
    Else 
     MessageBox.Show("No args") 
    End If 
End Sub 

Si je viens d'ouvrir l'application, je reçois le message me disant pas args ont été fournis, si je tente d'utiliser « ouvrir avec » ma demande pour tout fichier mon application se bloque. J'ai cette fonction appelée pendant form_load.

Répondre

1

Je crains que c'est un classique hors par une erreur, tableaux VB.NET et collections commencent à 0 élément, utilisez donc:

MessageBox.Show(My.Application.CommandLineArgs(0)) 
+0

en fait, le 1 était un test parce que le 0 ne fonctionnait pas non plus – MaQleod

+0

: Je ne savais pas où le chemin était fourni, donc j'ai essayé d'autres numéros, j'ai oublié de le changer à My.Application.CommandLineArgs (0) avant de poster – MaQleod

+0

@MaQleod. S'il vous plaît pourriez-vous éditer votre question et remplacer le 1 avec un 0. – RobS

1

Dans les propriétés de votre application, sélectionnez Debug côté onglet , ajoutez des arguments de ligne de commande dans la zone de saisie fournie et exécutez le programme depuis l'EDI. De cette façon, vous devriez obtenir exactement quelle erreur se produit pour provoquer le plantage de votre application.

0

Il serait difficile de déboguer en temps réel un programme destiné à être appelé via l'option de menu contextuel Ouvrir avec, puisqu'il est lancé directement par le système d'exploitation.

Il peut être utile de connaître le texte de l'erreur que vous obtenez. Il se peut que lorsque Windows appelle une application .NET via Open With, elle ne remplit pas My.Application.CommandLineArgs. Ou il pourrait mettre le nom du fichier plus bas dans la collection. Vous pouvez essayer

For Each s As String In My.Application.CommandLineArgs 
    MessageBox.Show(s) 
Next 

pour connaître le nombre exact d'éléments et leurs valeurs. Dans tous les cas, je ferais des recherches sur comment intercepter l'argument de contexte envoyé à une application en utilisant Open With.

+0

AFAIK la commande "ouvrir avec ..." devrait juste mettre le nom de fichier comme le premier argument de ligne de commande. La définition des arguments de ligne de commande via les options de débogage IDE doit permettre de déterminer les causes du blocage de l'application. Ma conjecture est que l'application essaye d'ouvrir le fichier fourni par les arguments de la ligne de commande avant qu'il ne soit fait d'autres travaux nécessaires, mais sans l'erreur d'application, nous ne saurons jamais .... à vous MaQleod. – RobS

Questions connexes