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 :
Errreur 1 , ligne 15 : Process.Start(Proc) : Le proc est signalé comme non déclaré alors qu'il est tout a fait
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
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 .
Partager