Mode administrateur

Résolu
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012 - 2 juil. 2010 à 11:20
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012 - 3 juil. 2010 à 11:58
Bonjour,

Je développe une application en vb.net et cette dernière créer des fichiers .txt de sauvegarde au démarrage et à l'arrêt pour diverses raisons.
Pour que l'application créer ces fichiers je dois forcer l'application à démarrer en droit administrateur.

Y'a t'il un moyen d'éviter cela ou bien le contourner?


Jules

19 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
3 juil. 2010 à 11:15
Tu peux aussi faire ça (le chemin fera moins "poubelle") :
Public Function GetAppData() As String
    Dim Path As String = My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData
    Return Path.Remove(Path.LastIndexOf(""))
End Function

Dim Path As String = GetAppData()
Directory.CreateDirectory(Path)
Dim FichierSettings As FileStream = IO.File.Create(Path & "\settings.sms")


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
3
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
2 juil. 2010 à 12:14
S@lut, c'est bizard ce que tu dis je vois pas pourquoi tu veux avoir des privilèges inutils.

Voila par exemple un code qui utilise un fichier texte et qui enregistre ce qui est dedans :

Option Explicit On
Imports System.IO
Imports Microsoft.Win32
Public Class Form6
    Public writer As StreamWriter
    Dim fichier As String
    Dim zoom As Integer = 100

    Private Sub Form6_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        céation_fichier()
        fichier = My.Application.Info.DirectoryPath & "\Textvalue.ini" 'chemin du fichier texte
        Dim monStreamWriter As StreamWriter = New StreamWriter(fichier)
        monStreamWriter.WriteLine(CheckBox1.Checked.ToString)
        monStreamWriter.WriteLine(CheckBox2.Checked.ToString)
        monStreamWriter.WriteLine(RadioButton1.Checked.ToString)
        monStreamWriter.WriteLine(TextBox1.Text)
        monStreamWriter.WriteLine(TextBox2.Text)
        monStreamWriter.WriteLine(ComboBox1.Text)
        'Fermeture du StreamWriter (Trés important)
        monStreamWriter.Close()
    End Sub

    Private Sub Form6_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        fichier = My.Application.Info.DirectoryPath & "\Textvalue.ini"
        Dim monStreamReader As StreamReader = New System.IO.StreamReader(fichier) 'Stream pour la lecture avec caractères accentués du fichier

        If monStreamReader.ReadLine = "True" Then
            CheckBox1.Checked = True
        Else
            CheckBox1.Checked = False
        End If
        If monStreamReader.ReadLine = "True" Then
            CheckBox2.Checked = True
        Else
            CheckBox2.Checked = False
        End If
        If monStreamReader.ReadLine = "True" Then
            RadioButton1.Checked = True
        Else
            RadioButton2.Checked = True
        End If

        TextBox1.Text = monStreamReader.ReadLine

        TextBox2.Text = monStreamReader.ReadLine

        ComboBox1.Text = monStreamReader.ReadLine

        If RadioButton1.Checked True And CheckBox2.Checked False Then
            Form1.PictureBox13.Visible = False
            Form1.PictureBox15.Visible = False
        End If

        If RadioButton1.Checked True And CheckBox2.Checked True Then
            Form1.PictureBox13.Visible = True
            Form1.PictureBox15.Visible = True
        End If

        If RadioButton2.Checked True And CheckBox2.Checked False Then
            Form1.PictureBox14.Visible = False
            Form1.PictureBox15.Visible = False
        End If

        If RadioButton2.Checked True And CheckBox2.Checked True Then
            Form1.PictureBox14.Visible = True
            Form1.PictureBox15.Visible = True
        End If

        'Fermeture du StreamReader (Trés important)
        monStreamReader.Close()
    End Sub

    Private Sub céation_fichier()
        ' creer un nouveau fichier
        Dim path As String = (Application.StartupPath & "\Textvalue.ini")
        If IO.File.Exists(path) Then
            Exit Sub
        Else
            IO.File.Create(Application.StartupPath & "\Textvalue.ini")
        End If
    End Sub

    Private Sub CheckBox1_CheckedChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
        If CheckBox1.Checked = True Then
            Form1.Label4.Visible = True
            Form1.PictureBox8.Visible = True
            Form1.ProgressBar1.Location = Form1.Label9.Location
            Form1.PictureBox9.Location = Form1.Label5.Location
            Form1.PictureBox10.Location = Form1.Label8.Location

        Else
            CheckBox1.Checked = False
            Form1.Label4.Visible = False
            Form1.PictureBox8.Visible = False
            Form1.ProgressBar1.Location = Form1.Label6.Location
            Form1.PictureBox9.Location = Form1.Label7.Location
            Form1.PictureBox10.Location = Form1.Label10.Location
        End If
    End Sub

    Private Sub CheckBox2_CheckedChanged_2(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox2.CheckedChanged
        If CheckBox2.Checked = True Then
            Form1.TextBox1.Visible = True
            Form1.PictureBox11.Visible = True
        End If
        If CheckBox2.Checked = False Then
            Form1.TextBox1.Visible = False
            Form1.PictureBox11.Visible = False
        End If
        If RadioButton1.Checked True And CheckBox2.Checked True Then
            Form1.PictureBox13.Visible = True
            Form1.PictureBox14.Visible = False
            Form1.PictureBox15.Visible = True
        End If

        If RadioButton1.Checked True And CheckBox2.Checked False Then
            Form1.PictureBox13.Visible = False
            Form1.PictureBox14.Visible = False
            Form1.PictureBox15.Visible = False
        End If
        If RadioButton2.Checked True And CheckBox2.Checked True Then
            Form1.PictureBox13.Visible = False
            Form1.PictureBox14.Visible = True
            Form1.PictureBox15.Visible = True
        End If
        If RadioButton2.Checked True And CheckBox2.Checked False Then
            Form1.PictureBox13.Visible = False
            Form1.PictureBox14.Visible = False
            Form1.PictureBox15.Visible = False
        End If
    End Sub


Ma LV2 c'est le Visual Basic, et toi ?
0
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012
2 juil. 2010 à 13:31
Merci de ta réponse, mais même avec ton code, si j'exécute pas le programme en mode administrateur, il ne peut pas créer les fichiers .txt.
Enfin, plus précisément, ca marche sur le bureau ou dans mes documents, mais lorsque je lance l'application depuis le dossier Program Files, l'application affiche des messages d'erreurs en raison de manque de privilèges.

Jules
0
cs_aus3004 Messages postés 319 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 16 mars 2011 1
2 juil. 2010 à 13:37
C'est vraiment étrange car pour accéder un fichier txt normalement ya aucun droit à avoir...

C'est quoi ton système d'exploitation ??


Ma LV2 c'est le Visual Basic, et toi ?
0

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

Posez votre question
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012
2 juil. 2010 à 13:43
J'ai Windows 7 Familiale Premium 64bits

Jules
0
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
2 juil. 2010 à 14:35
Bonjour,
pourquoi ne pas installer ton prog dans
\users\
a+
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
2 juil. 2010 à 15:55
julien2424>

Regarde dans les propriétés du projet à "Afficher les paramètres U.A.C"

tu devrais avoir un fichier de configuration XML qui s'affiche :

<?xml version="1.0" encoding="utf-8"?>

  
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- Options du manifeste de contrôle de compte d'utilisateur
             Si vous souhaitez modifier le niveau du contrôle de compte d'utilisateur Windows, remplacez le 
             noeud requestedExecutionLevel par l'une des propositions suivantes :

        <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
        <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
        <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />

            Si vous souhaitez utiliser la virtualisation de fichiers et du Registre pour la 
            compatibilité descendante, supprimez le noeud requestedExecutionLevel.
        -->
        <requestedExecutionLevel level="asInvoker" uiAccess="false" />
      </requestedPrivileges>
    </security>
  </trustInfo>


Remplace simplement la ligne :

<requestedExecutionLevel level="asInvoker" uiAccess="false" />


Par:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />


Pour que l'U.A.C t'avertisse au lancement de l'application que le programme requière les droits d'administrateur.
Attention cependent, l'accès aux dossiers personnels est limité sous Win7, même en mode admin.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012
2 juil. 2010 à 16:12
ca c'est fait ^^, mais j'aimerai éviter d'élever les privilèges au démarrage de mon application.
Je crois que dès que c'est impossible sous Vista et 7. Sur XP aucun soucis!


Jules
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
2 juil. 2010 à 16:34
Je crois que dès que c'est impossible sous Vista et 7


En effet si les modes étaient contournables à quoi servirait-ils ?


Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012
2 juil. 2010 à 16:36
Je trouve juste dommage que sous Vista et 7, ont doit avoir des droits administrateurs pour créer des fichiers .txt dans le dossier Program Files de l'application
:S
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
2 juil. 2010 à 17:16
Bah justement, c'est à cela qui différencie les modes admin et modes normaux.

C'est ce que je dis plus haut. Par mesure de sécurité, tous les programmes voulant écrire aux emplacements "sensibles" comme le système ou le dossier programmes, certaines clés de registre aussi, doivent avoir le mode administrateur et déclenchent un avertissement, du coup plus possible de faire un virus qui écrit dans le dossier système à l'insu de l'utilisateur.

Perso, je trouve cela bidon, car les utilisateurs lambda clic souvent sui "oui" sans même savoir à quoi correspondent les avertissements des pare-feu ou UAC. Pour ma part j'ai désactivé l'UAC et les programmes s'exécutent tous au même niveau, par contre sous Win7, pas de possibilité d'écriture dans le dossier utilisateur.

Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer.
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
2 juil. 2010 à 23:56
lus possible de faire un virus qui écrit dans le dossier système à l'insu de l'utilisateur
Mais si, il suffit de désactiver l'UAC par l'intermédiaire de l'utilisateur qui n'est (la plupart du temps) qu'un gros pigeon

Pour en revenir au sujet de ce topic, il serait déjà plus malin de stocker les données relatives au programme dans un répertoire %APPDATA%\nomDuProgramme\. En VB.NET, la variable d'environnement %APPDATA% est lisible via My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationDataest. Là il y a peu de chances que tu rencontres des problèmes.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012
3 juil. 2010 à 09:53
Je vais essayer ce que tu me propose ghuysmans99
En tout cas merci à vous tous pour vos bonnes idées..

@ Mayzz: Le problème c'est que quand j'utilise les privilèges, Windows me déclare "Programme inconnu" et les fous de la sécurité pourraient penser que mes .txt soient des supers virus... à tord :D

Jules
0
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012
3 juil. 2010 à 10:07
Bon alors quand je met ça:

Dim Creer_Setting As FileStream = IO.File.Create(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData & "\JM Créations\Surveillance météorologique\settings.sms")


J'ai un message d'erreur. Apriori il m'engueule car les dossiers (\JM Créations\Surveillance météorologique\) n'existe pas!

Comment faire, dois-je les créer avant?

Jules
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
3 juil. 2010 à 10:36
En effet, tu dois les créer avant. Code non testé mais normalement fonctionnel :
Dim Path As String = "My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData & "\JM Créations"
Directory.CreateDirectory(Path)
Path &= "\Surveillance météorologique"
Directory.CreateDirectory(Path)
Dim FichierSettings As FileStream = IO.File.Create(Path & "\settings.sms")


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012
3 juil. 2010 à 10:47
Ça marche parfaitement, sauf, un petit soucis

Cette référence: My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData, créer par défaut JM Créations/Surveillance météorologique/2.5.5.5/ + et le code supplémentaire rajouté + JM Créations/Surveillance météorologique/Settings.sms

Au final on à JM Créations/Surveillance météorologique/2.5.5.5/JM Créations/Surveillance météorologique/Settings.sms

Le problème c'est ça: JM Créations/Surveillance météorologique/2.5.5.5/ qui se créer automatiquement. Comment s'en débarrasser?

Jules
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
3 juil. 2010 à 10:58
Avec un peu de chance, comme ça :
Dim Path As String = My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData
Directory.CreateDirectory(Path)
Dim FichierSettings As FileStream = IO.File.Create(Path & "\settings.sms")


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012
3 juil. 2010 à 11:06
C'est ce que j'ai fait, mais par défaut, l'assembly est entièrement recopié afin de créer les dossiers d'ApplicationData. Cela ne le fait qu'avec l'ApplicationData car pour MyDocuments par exemple, c'est libre!

Par chance, le code (2.5...) recopié ne concerne que le numeréo d'assembly (version de l'application) mais seulement le numéro de fichier. Je n'ai donc qu'a ne pas le changer et au lieu de mettre "2.5.5.5" je mettrais un bon vieux "1036" qui ne bougera pas.

C'est du bricolage mais bon, on nous y force aussi :D

Au final: JM Créations/Surveillance météorologique 5/1036/

Jules
0
julien2424 Messages postés 76 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 24 avril 2012
3 juil. 2010 à 11:58
Rien à dire, c'est parfait :D
Merciii beaucoup ghuysmans99!

C'est exactement ce que je voulais, créer des fichiers de sauvegardes pour l'application tout en évitant l'élévation des privilèges!


Jules
0
Rejoignez-nous