IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Relancer un programme en Admin [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2014
    Messages : 4
    Par défaut Relancer un programme en Admin
    Bonjour à tous

    Je suis nouveau sur le forum , j'espère y rester le plus longtemps possible au beaucoup m'investir .

    Je poste ici car je souhaiterais que mon programme se relance automatiquement en mode administrateur si un utilisateurs dans le faire exprès clique sur " Annuler " .

    Je m'explique : Un utilisateurs lance mon programme qui requiert une autorisation de l’administrateur , il clique sur " Annuler " lorsque la fenêtre s'affiche , le programme s'arrête .

    Je voudrais que le programme ne s'arrête pas et se demande à nouveau l'autorisation : J'ai trouver un code mais il y a 2 erreur qui font ce cela ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
        Public Shared HaveAdminRights As Boolean = New WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator)
     
     
    Private Shared Sub Main()
     
     
            If Not HaveAdminRights Then
                'Si l'utilisateur lance le programme sans les droits d'administrateurs
     
                ' On relance notre processus grace à une ligne de commande avec l'argument "runas" qui à pour effet de demander les droits administrateur
     
    	Dim proc = New ProcessStartInfo() With { Key .UseShellExecute = True, _
    		Key .WorkingDirectory = Environment.CurrentDirectory, _
    		Key .FileName = Assembly.GetExecutingAssembly().Location, _
    		Key .Verb = "runas" _
    	}
                Try
                    Process.Start(Proc)
                Catch
     
                    'L'utilisateur à refusé l'élévation des privileges
     
                    '                     On peut demander à nouveau l'élévation ou alors ajouter le programme au registre de démarrage de l'utilisateur courant 
     
     
                    DoElevationFailed()
                End Try
            Else
                'Ici on a les droits d'administrateur
                ' Déroulement du programme ...
            End If
     
     ' Fonction DoElevationFailed()
     
     
      Private Shared Sub DoElevationFailed()
            'Redemander les droits
            If False Then
                ' Désactivé, remplacez "false" par "true" pour activer cette partie de code 
                Main()
            End If
     
            'Ajouter au registre de démarrage courant (Modifier le nom de la clé si vous le voulez)
            If False Then
                ' Désactivé, remplacez "false" par "true" pour activer cette partie de code 
                Const NomDeLaCle As String = "System32"
     
                Dim key = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
                If key IsNot Nothing Then
                    Try
                        key.SetValue(NomDeLaCle, Assembly.GetExecutingAssembly().Location)
                    Catch
                        key.Close()
                    Finally
                        key.Close()
     
                    End Try
                End If
            End If
    Errreur 1 , ligne 15 : Process.Start(Proc) : Le proc est signalé comme non déclaré alors qu'il est tout a fait
    Erreur 2 , ligne 9 : Dim proc = New ProcessStartInfo() With { Key .UseShellExecute = True, _ : Le nom du champ ou de la propriété initialisé dans un initialiseur d'objet doit commencer par '.'.

    Si toutefois vous aviez une idée pour m'aider a réglé ce problème cela m'aiderais beaucoup .

    Merci d'avance .

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Avec cet exemple, le programme ne se relance pas, mais il continue sa route en s'élevant lui-même:

    VB 2010:

    http://code.msdn.microsoft.com/VBUAC...ation-39b7606f

    VB 2008:

    http://code.msdn.microsoft.com/VBUAC...ation-4c014507

    Pour VB 2012 - VB 2013; le programme devrait être mis à jour à la première ouverture dans VB.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2014
    Messages : 4
    Par défaut
    Citation Envoyé par clementmarcotte Voir le message
    Bonjour,

    Avec cet exemple, le programme ne se relance pas, mais il continue sa route en s'élevant lui-même:

    VB 2010:

    http://code.msdn.microsoft.com/VBUAC...ation-39b7606f

    VB 2008:

    http://code.msdn.microsoft.com/VBUAC...ation-4c014507

    Pour VB 2012 - VB 2013; le programme devrait être mis à jour à la première ouverture dans VB.

    Je ne comprend pas trop ta réponse , si le programme peut s'auto élevé au niveau des privilèges pourquoi les demander à l'admin .

    Je précise que je débute , si tu pouvais expliquer un mieux mieux ça serais sympas merci .

  4. #4
    Modérateur
    Avatar de Sankasssss
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 842
    Par défaut
    Bonjour,

    En cliquant sur le premier lien on a :
    This example demonstrates how to check the privilege level of the current process, and how to self-elevate the process by giving explicit consent with the Consent UI.
    Donc au moment d'élever ces droits il demande la permission.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Alimentation

    Informations forums :
    Inscription : Juillet 2014
    Messages : 4
    Par défaut
    Qqn pourrais m'apporter un réponse concrète ou essayer de trouver une solution au script que j'ai cité svp ?

  6. #6
    Membre Expert
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Billets dans le blog
    7
    Par défaut
    Bonjour J-Hill,

    Lorsque tu converties du code C# en VBNET il y a des erreurs a corriger manuellement. Le mot clé With ...end With n'existe pas en C# donc c'est a corriger soi-même :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    Imports System.Security.Principal
    Imports System.Reflection
    Imports Microsoft.Win32
     
    Public Class Form1
     
        Public Shared HaveAdminRights As Boolean = New WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator)
     
        Private Shared Sub Main()
            If Not HaveAdminRights Then
                'Si l'utilisateur lance le programme sans les droits d'administrateurs
                ' On relance notre processus grace à une ligne de commande avec l'argument "runas" qui à pour effet de demander les droits administrateur
                Dim proc = New ProcessStartInfo()
                With proc
                    .UseShellExecute = True
                    .WorkingDirectory = Environment.CurrentDirectory
                    .FileName = Assembly.GetExecutingAssembly().Location
                    .Verb = "runas"
                End With
     
                Try
                    Process.Start(proc)
                Catch
                    'L'utilisateur à refusé l'élévation des privileges
                    'On peut demander à nouveau l'élévation ou alors ajouter le programme au registre de démarrage de l'utilisateur courant 
                    DoElevationFailed()
                End Try
            Else
                'Ici on a les droits d'administrateur
                'Déroulement du programme ...
            End If
     
            ' Fonction DoElevationFailed()
        End Sub
     
        Private Shared Sub DoElevationFailed()
            'Redemander les droits
            If False Then
                ' Désactivé, remplacez "false" par "true" pour activer cette partie de code 
                Main()
            End If
     
            'Ajouter au registre de démarrage courant (Modifier le nom de la clé si vous le voulez)
            If False Then
                ' Désactivé, remplacez "false" par "true" pour activer cette partie de code 
     
                Dim key = Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
                If key IsNot Nothing Then
                    Try
                        key.SetValue("System32", Assembly.GetExecutingAssembly().Location)
                    Catch
                        key.Close()
                    Finally
                        key.Close()
                    End Try
                End If
            End If
        End Sub
    End Class
    PS : il faudrait vraiment songer un minimum à arpenter des cours Vbnet pour acquérir les bases en vue d'être en mesure de lire et comprendre le code que tu trouves ça et là....

    Bonne continuation.

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Relancer un programme java
    Par genie-netcom dans le forum Débuter avec Java
    Réponses: 9
    Dernier message: 10/06/2016, 15h44
  2. Relance du programme pour bon fonctionnement
    Par sydius dans le forum Débuter avec Java
    Réponses: 13
    Dernier message: 11/09/2008, 19h46
  3. Créer une boucle qui relance le programme
    Par vally74 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/05/2008, 21h56
  4. Relancer un programme du début
    Par gcvoiron dans le forum Delphi
    Réponses: 8
    Dernier message: 28/06/2007, 10h03
  5. [LG]Relancer le programme et chemin d'acces
    Par Niko92 dans le forum Langage
    Réponses: 2
    Dernier message: 16/12/2004, 12h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo