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:
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 .