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

Signaler
Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Statut
Membre
Dernière intervention
6 juillet 2018
-
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
-
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

4 réponses

Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
544
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

Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Statut
Membre
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...
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
544
As tu lu l'aide en ligne que je t'ai mis en lien?
Qu'as tu essayé avec?
Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Statut
Membre
Dernière intervention
6 juillet 2018
>
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021

Bah je ne sais pas utiliser la fonction :/ Pourrais-tu m'expliquer s'il te plait ^^'
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
544
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.
Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Statut
Membre
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 !
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
544
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.....
Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Statut
Membre
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
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
137
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


Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Statut
Membre
Dernière intervention
6 juillet 2018

Bonjour,
Oui c'est pour faire un Set-Up de logiciel...
Merci de ta réponse.
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
137 >
Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Statut
Membre
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
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
544
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.
Messages postés
7
Date d'inscription
mercredi 4 juillet 2018
Statut
Membre
Dernière intervention
6 juillet 2018

Bonjour,
D'accord, je prend note. Merci de ta réponse.
Messages postés
15924
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
12 mai 2021
544