Erreur lors de l'ouverture d'un programme

ThomasIsComingBack Messages postés 33 Date d'inscription lundi 19 juillet 2010 Statut Membre Dernière intervention 6 mars 2013 - 8 déc. 2012 à 10:50
ThomasIsComingBack Messages postés 33 Date d'inscription lundi 19 juillet 2010 Statut Membre Dernière intervention 6 mars 2013 - 8 déc. 2012 à 14:26
Bonjour
Au lancement de mon programme, je récupère les arguments par une fonction que je donnerai après, le problème c'est que dans mon code :
        If AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData.Length > 0 Then
            Dossier = Path.GetDirectoryName(AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData(0))
            Dim AddItem = Dir(Dossier + "\*.apk", vbNormal)
            While AddItem <> ""
                ListeApplications.Items.Add(Mid(AddItem, 1, AddItem.Length - 4))
                AddItem = Dir()
            End While
            NomFichier = Dossier & "\Installation.bat"
        End If

Si j'ouvre le programme sans passer par une ouverture de fichier, le programme plante avec un "La référence d'objet n'est pas définie à une instance d'un objet" sur la première ligne.
Auriez vous une idée ?

18 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 déc. 2012 à 11:35
Bonjour,
Si tu ouvres sans choisir de dossier, ta variable Dossier = "" et donc le reste plante forcément
Il te faut donc forcer à choisir un dossier et ne continuer que si dossier <> ""


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
ThomasIsComingBack Messages postés 33 Date d'inscription lundi 19 juillet 2010 Statut Membre Dernière intervention 6 mars 2013
8 déc. 2012 à 11:40
Vois par toi même...
0
Utilisateur anonyme
8 déc. 2012 à 12:49
Bonjour,

Si tu veux parler d'arguments de ligne de commande (à récupérer par exemple sur un double clic d'un fichier dans l'explorateur), tu peux les récupérer facilement souqs forme de tableau par la fonction Environment.GetCommandLineArgs.
0
ThomasIsComingBack Messages postés 33 Date d'inscription lundi 19 juillet 2010 Statut Membre Dernière intervention 6 mars 2013
8 déc. 2012 à 12:59
Salut
Non justement je ne peux pas. Si j'ouvre l'application et que je prends l'élément 1 du tableau (qui devrait être le chemin du fichier) il me dit que l'index est en dehors du tableau.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
8 déc. 2012 à 13:10
Non justement je ne peux pas.

Bien sur que si voyons...
Montre moi donc ce code.
0
ThomasIsComingBack Messages postés 33 Date d'inscription lundi 19 juillet 2010 Statut Membre Dernière intervention 6 mars 2013
8 déc. 2012 à 13:15
Tout ce que je fais, dans la feuille principale_Load :
        MsgBox(Environment.GetCommandLineArgs(1))

Et c'est tout.
0
Utilisateur anonyme
8 déc. 2012 à 13:16
Et l'argument 0 que donne t-il ?
0
ThomasIsComingBack Messages postés 33 Date d'inscription lundi 19 juillet 2010 Statut Membre Dernière intervention 6 mars 2013
8 déc. 2012 à 13:17
Il retourne le chemin du programme
0
Utilisateur anonyme
8 déc. 2012 à 13:19
Et je suppose que ton registre fais référence à ton programme avec l'extension qu'il faut ?
0
ThomasIsComingBack Messages postés 33 Date d'inscription lundi 19 juillet 2010 Statut Membre Dernière intervention 6 mars 2013
8 déc. 2012 à 13:20
Oui et puis de toute façon il ouvre le programme donc ça doit pas être un problème de registre
0
Utilisateur anonyme
8 déc. 2012 à 13:21
Oui mais ce n'est pas suffisant pour ouvrir des fichiers par ligne de commande, il faut rajouter au registre des informations supplémentaires.
Tout se passe dans HKEY_CLASSES_ROOT.
L'as-tu fait ?
0
ThomasIsComingBack Messages postés 33 Date d'inscription lundi 19 juillet 2010 Statut Membre Dernière intervention 6 mars 2013
8 déc. 2012 à 13:24
Non je me suis contenté de rajouter l'extension APK dans les options dans les propriétés du projet.

Dans HKEY_CLASSES_ROOT > .apk, j'ai :
(par défaut) = 1
AppId = Android Installer.application, Culture=neutral, PublicKeyToken=0000000000000000, processorArchitecture=x86
DeploymentProviderUrl = file:///C:/Users/Thomas%20Pat/Documents/Visual%20Studio%202010/Projects/Android%20Application%20Batch%20Installer%20Creator/Android%20Application%20Batch%20Installer%20Creator/publish/Android%20Installer.application
Guid = {79cc26ec-8721-4651-92da-f7014c223a02}
0
Utilisateur anonyme
8 déc. 2012 à 13:32
Dans ton registre HKEY_CLASSES_ROOT, tu dois créer 2 clé distinctes :

Une premiere dont le nom doit reprendre l'extension de ton fichier (avec un . devant genre .tho)
Sa valeur doit comporter un nom comme MonAppli.Fichiers

Une deuxième clé dont le nom reprend celui de ta valeur de la première clé donc MonAppli.Fichiers.
Ensuite 3 sous-clés doivent être crées, 'shell', 'open' et 'command'.
C'est la valeur de la sous-clé 'command' qui détermine le chemin d'accès et le nom de l'exécutable qui lancera le fichier suivi d'un paramètre %1 qui permettra d'avoir le bon fichier en ligne de commande :
Voici un exemple de la valeur de la sous-clé 'command'
"chemin/MonAppli.exe" "%1"

Attention : la présence des guillemets est importante
0
Utilisateur anonyme
8 déc. 2012 à 13:40
Comme ceci pour simplifier :

HKEY_CLASSES_ROOT
              |
              |_____ .apk --->  MonAppli.Fichiers
              |
              |______MonAppli.Fichiers ---> par defaut
                                 |
                                 |_______open    ---> par défaut
                                 |_______shell   ---> par defaut
                                 |_______command ---> "chemin/MonAppli.exe" "%1"
0
Utilisateur anonyme
8 déc. 2012 à 13:50
Ou plutôt comme ceci :
HKEY_CLASSES_ROOT
              |
              |___ .apk --->  MonAppli.Fichiers
              |
              |___MonAppli.Fichiers ---> par defaut
                                 |
                                 |___open    ---> par défaut
                                      |____shell   ---> par defaut
                                              |____command ---> "chemin/MonAppli.exe" "%1"
0
ThomasIsComingBack Messages postés 33 Date d'inscription lundi 19 juillet 2010 Statut Membre Dernière intervention 6 mars 2013
8 déc. 2012 à 13:51
D'accord, mais ça je peux le faire par le biais du programme ? Et quand tu dis "MonAppli.Fichiers " il faut que je mette par exemple AndroidInstaller.apk comme valeur de quoi comme clé ?
0
Utilisateur anonyme
8 déc. 2012 à 14:00
Tu peux mettre le nom de clé que tu veux du moment qu'elle reprenne la valeur de ta première clé.
Et oui, tu peux le faire depuis ton programme en utilisant la classe Registry logée dans l'espace de noms microsoft.win32.
Attention cependant à donner des droits suffisants a ton application pour magouiller le registre.
0
ThomasIsComingBack Messages postés 33 Date d'inscription lundi 19 juillet 2010 Statut Membre Dernière intervention 6 mars 2013
8 déc. 2012 à 14:26
OK, merci je verrai tout ça
0
Rejoignez-nous