[VB.NET] Une exception non gérée [Résolu]

Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Dernière intervention
6 juillet 2018
- - Dernière réponse : Whismeril
Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 décembre 2018
- 6 juil. 2018 à 10:54
Bonjour à tous,

Je développement une application, je voudrais créer un fichier (dossier) dans le 'C:\Program Files (x86)\. Mais quand je démarre mon application bah j'ai mon jolie code d'erreur :

Une exception non gérée du type 'System.UnauthorizedAccessException' s'est produite dans mscorlib.dll

Informations supplémentaires : L'accès au chemin d'accès 'C:\Program Files (x86)\' est refusé.

Voici mon code source :

Private Sub StartInstall_Click(sender As Object, e As EventArgs) Handles StartInstall.Click
SetAttr("C:\Program Files (x86)\", vbNormal)
My.Computer.FileSystem.CreateDirectory("C:\Program Files (x86)\***LOGICIELNAME***")
End Sub

Voilà voilà...

Amicalement
Afficher la suite 

Votre réponse

4 réponses

Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 décembre 2018
0
Merci
Bonjour

Selon ton os ce dossier s’affiche comme ça, mais ça n’est pas le « vrai » chemin.
Il faut utiliser Environment.GetFolderPath
https://msdn.microsoft.com/fr-fr/library/14tx8hby(v=vs.110).aspx

KyneasSurYoutube
Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Dernière intervention
6 juillet 2018
-
Bonjour,

Merci de votre réponse mais le problème c'est que je ne sais pas comment utiliser cette environnement...
Whismeril
Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 décembre 2018
-
As tu lu l'aide en ligne que je t'ai mis en lien?
Qu'as tu essayé avec?
KyneasSurYoutube
Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Dernière intervention
6 juillet 2018
> Whismeril
Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 décembre 2018
-
Bah je ne sais pas utiliser la fonction :/ Pourrais-tu m'expliquer s'il te plait ^^'
Commenter la réponse de Whismeril
Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 décembre 2018
0
Merci
Bonjour,
je t'ai posé 2 questions simples, aux quelles j'attends que tu répondes avant de t'expliquer quoique ce soit.

Ta réponse qui n'en est pas une, peut s'interpréter de mile façons différentes dont par exemple ces 2 là
  • "Oui j'ai lu l'aide en ligne, mais à la ligne XXX, je n'ai pas compris. J'ai testé l'exemple, il m'affiche bien YYY, mais je n'ai pas su l'adapter à mon cas"
  • "Je n'ai rien lu, je n'ai rien testé, j'attends que tu me donnes tout de suite le code qui marche sans que j'ai un effort à fournir"


Tu comprendras que selon comment je choisis d'interpréter que tu me dises 2 fois "Je sais pas faire", j'ai envie de continuer à t'aider ou pas du tout.

Merci donc de répondre à mes 2 questions, et je t'expliquerai en me basant sur tes réponses.
KyneasSurYoutube
Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Dernière intervention
6 juillet 2018
-
Bonjour,
En faite, tu ne comprend pas ma réponse hein... Pfff
Je ne sais pas UTILISER CETTE FONCTION !
J'ai lu l'article mais j'arrive PAS !
Whismeril
Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 décembre 2018
-
et manifestement tu ne comprends pas non plus qu'en te contentant de répéter "j'arrive pas" ça ne me permet pas de cerner ce que tu ne comprends pas.
Il y a 2 lignes de codes, parmi les plus simples en VB.Net.
Un exemple tout prêt à tester, que tu ne m'a toujours pas dit si tu avais pris la peine d'essayer.
Bref.....
KyneasSurYoutube
Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Dernière intervention
6 juillet 2018
-
J'ai essayé mais cela n'as rien fait :/ Je voudrais le faire marcher sur :
Private Sub StartInstall_Click(sender As Object, e As EventArgs) Handles StartInstall.Click
SetAttr("C:\Program Files (x86)\", vbNormal)
My.Computer.FileSystem.CreateDirectory("C:\Program Files (x86)\***LOGICIELNAME***")
End Sub
Commenter la réponse de Whismeril
Messages postés
1724
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
9 décembre 2018
0
Merci
Bonjour à vous deux
Déjà lorsque je vois le nom de la sub StartInstall je me pose cette question :
KyneasSurYoutube veut-il faire l'installation d'un projet pour avoir l'éxécutable sur son PC comme n'importe quel Setup classique d'un logiciel ?
Si le dossier "C:\Program Files (x86)" n'est pas accessible directement c'est que c'est justement dans ce dossier que les installations avec un vrai Setup se font et qu'il y a des contraintes bien précises pour créer un setup d'installation
Surtout qu'il demande que ce dossier ait l'attribut Normal pour ensuite créer dans ce même dossier le dossier de son "LOGICIELNAME" comme le montre son code

Private Sub StartInstall_Click(sender As Object, e As EventArgs) Handles StartInstall.Click  

 ' attribut Normal
SetAttr("C:\Program Files (x86)\", vbNormal)
 ' création répertoire 
My.Computer.FileSystem.CreateDirectory("C:\Program Files (x86)\***LOGICIELNAME***")

End Sub 


Attendons de savoir le but de ce code pour poursuivre la dicussion


KyneasSurYoutube
Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Dernière intervention
6 juillet 2018
-
Bonjour,
Oui c'est pour faire un Set-Up de logiciel...
Merci de ta réponse.
vb95
Messages postés
1724
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
9 décembre 2018
> KyneasSurYoutube
Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Dernière intervention
6 juillet 2018
-
Bonjour
Et ce logiciel est un projet que tu as codé avec Visual Studio Net ?
Si oui précises-moi quel est ta version de visual Studio ?
Car Visual Studio intègre les outils pour faire directement un Setup mais la procédure est différente selon les versions
Commenter la réponse de vb95
Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 décembre 2018
0
Merci
J'ai essayé mais cela n'as rien fait :/

Là au moins ça apporte une information utile, ce code exemple est fonctionnel, mais il faut avoir quelques bases de programmation pour le lancer. Je suppose donc que tu es autodidacte et comme la grande majorité (moi aussi il fut un temps) tu as fait l'impasse sur les bases.

Ça finit toujours par coincer, là c'est simple, mais la prochaine fois ça le sera peut-être moins.
Le meilleur conseil que je puisse te donner est de prendre quelques jours pour suivre un cours en ligne.
Celui-ci est pas mal http://plasserre.developpez.com/cours/vb-net/
Ça te donnera un socle de départ, et tu pourras reprendre ton projet plus efficacement.

Pour ton problème présent.

La classe Environment est une classe "Shared" ça veut dire qu'on ne peut pas l'instancier.
Pour utiliser une méthode, on fait donc
Environment.LaMethode()


La méthode GetFolderPath retourne le chemin d'un dossier système, en fonction du paramètre qu'on lui rentre.

Le paramètre est du type Environment.SpecialFolder, c'est une énumération, c'est à dire une liste de constante.
Par exemple, DayOfWeek est une énumération, avec les constante DayOfWeek.Monday, DayOfWeek.Tuesday, etc...

Dim chemin as string = Environment.GetFolderPath(Environment.SpecialFolder.System)
comme dans l'exemple va placer le chemin du dossier System dans la variable chemin.

Parmi toutes les valeurs Environment.SpecialFolder, il y en a une pour ProgramFiles X86, à utiliser sur un système X64. Sur un système X86, c'est ProgramFiles. Il faut donc tester le type de système avant de choisir la constante

@VB95, bonsoir.
Pour l'attribut et le fait de mettre son programme dans ce répertoire, j'ai envie de dire, quelque part c'est son problème.
KyneasSurYoutube
Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Dernière intervention
6 juillet 2018
-
Bonjour,
D'accord, je prend note. Merci de ta réponse.
Whismeril
Messages postés
12362
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 décembre 2018
-
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.