Mode administrateur [Résolu]

Messages postés
76
Date d'inscription
mardi 8 août 2006
Dernière intervention
24 avril 2012
- - Dernière réponse : julien2424
Messages postés
76
Date d'inscription
mardi 8 août 2006
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
Afficher la suite 

Votre réponse

19 réponses

Meilleure réponse
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
3
Merci
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

Merci cs_ghuysmans99 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de cs_ghuysmans99
Messages postés
319
Date d'inscription
jeudi 1 avril 2010
Dernière intervention
16 mars 2011
0
Merci
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 ?
Commenter la réponse de cs_aus3004
Messages postés
76
Date d'inscription
mardi 8 août 2006
Dernière intervention
24 avril 2012
0
Merci
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
Commenter la réponse de julien2424
Messages postés
319
Date d'inscription
jeudi 1 avril 2010
Dernière intervention
16 mars 2011
0
Merci
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 ?
Commenter la réponse de cs_aus3004
Messages postés
76
Date d'inscription
mardi 8 août 2006
Dernière intervention
24 avril 2012
0
Merci
J'ai Windows 7 Familiale Premium 64bits

Jules
Commenter la réponse de julien2424
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
0
Merci
Bonjour,
pourquoi ne pas installer ton prog dans
\users\
a+
Commenter la réponse de gillardg
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Dernière intervention
26 novembre 2013
0
Merci
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.
Commenter la réponse de Mayzz
Messages postés
76
Date d'inscription
mardi 8 août 2006
Dernière intervention
24 avril 2012
0
Merci
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
Commenter la réponse de julien2424
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Dernière intervention
26 novembre 2013
0
Merci
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.
Commenter la réponse de Mayzz
Messages postés
76
Date d'inscription
mardi 8 août 2006
Dernière intervention
24 avril 2012
0
Merci
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
Commenter la réponse de julien2424
Messages postés
2859
Date d'inscription
mardi 15 avril 2003
Dernière intervention
26 novembre 2013
0
Merci
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.
Commenter la réponse de Mayzz
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
0
Merci
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
Commenter la réponse de cs_ghuysmans99
Messages postés
76
Date d'inscription
mardi 8 août 2006
Dernière intervention
24 avril 2012
0
Merci
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
Commenter la réponse de julien2424
Messages postés
76
Date d'inscription
mardi 8 août 2006
Dernière intervention
24 avril 2012
0
Merci
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
Commenter la réponse de julien2424
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
0
Merci
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
Commenter la réponse de cs_ghuysmans99
Messages postés
76
Date d'inscription
mardi 8 août 2006
Dernière intervention
24 avril 2012
0
Merci
Ç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
Commenter la réponse de julien2424
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Dernière intervention
30 juin 2013
0
Merci
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
Commenter la réponse de cs_ghuysmans99
Messages postés
76
Date d'inscription
mardi 8 août 2006
Dernière intervention
24 avril 2012
0
Merci
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
Commenter la réponse de julien2424
Messages postés
76
Date d'inscription
mardi 8 août 2006
Dernière intervention
24 avril 2012
0
Merci
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
Commenter la réponse de julien2424

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.