Executer en tant que... de manière transparente pour l'utilisateur

Soyez le premier à donner votre avis sur cette source.

Snippet vu 11 226 fois - Téléchargée 35 fois

Contenu du snippet

Ca permet à un utilisateur avec un compte limité de pouvoir lancer un programme qui demande d'avoir des droits d'administrateur sans que celui ci n'ait à taper le mot de passe.
Par exemple, il est impossible de lancer Half Life sur un compte limité, on doit faire Executer en tant que et taper le mot de passe à chaque fois.

Voilà la solution:

Source / Exemple :


Créer un module genre module1.bas:

Private Const SW_SHOWNORMAL = 1
Private Const LOGON_WITH_PROFILE = &H1&
Private Const LOGON_NETCREDENTIALS_ONLY = &H2&
Private Const CREATE_DEFAULT_ERROR_MODE = &H4000000
Private Const CREATE_NEW_CONSOLE = &H10&
Private Const CREATE_NEW_PROCESS_GROUP = &H200&
Private Const CREATE_SEPARATE_WOW_VDM = &H800&
Private Const CREATE_SUSPENDED = &H4&
Private Const CREATE_UNICODE_ENVIRONMENT = &H400&
Private Const ABOVE_NORMAL_PRIORITY_CLASS = &H8000&
Private Const BELOW_NORMAL_PRIORITY_CLASS = &H4000&
Private Const HIGH_PRIORITY_CLASS = &H80&
Private Const IDLE_PRIORITY_CLASS = &H40&
Private Const NORMAL_PRIORITY_CLASS = &H20&
Private Const REALTIME_PRIORITY_CLASS = &H100&

Public Type STARTUPINFO
   cb As Long
   lpReserved As String
   lpDesktop As String
   lpTitle As String
   dwX As Long
   dwY As Long
   dwXSize As Long
   dwYSize As Long
   dwXCountChars As Long
   dwYCountChars As Long
   dwFillAttribute As Long
   dwFlags As Long
   wShowWindow As Integer
   cbReserved2 As Integer
   lpReserved2 As Long
   hStdInput As Long
   hStdOutput As Long
   hStdError As Long
End Type

Public Type PROCESS_INFORMATION
   hProcess As Long
   hThread As Long
   dwProcessID As Long
   dwThreadID As Long
End Type

Declare Function CreateProcessWithLogon Lib "Advapi32" Alias "CreateProcessWithLogonW" (ByVal lpUsername As Long, ByVal lpDomain As Long, ByVal lpPassword As Long, ByVal dwLogonFlags As Long, ByVal lpApplicationName As Long, ByVal lpCommandLine As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInfo As PROCESS_INFORMATION) As Long

Puis dans votre Form1:

Private Sub Form_Load()

Dim Startup As STARTUPINFO
Dim ProcessInf As PROCESS_INFORMATION
Dim return_value As Long
Dim app_to_run As String
Startup.cb = Len(Startup)
lpDomain = "."  'C'est ce qu'il faut mettre pour XP
app_to_run = "c:\Sierra\Half-Life\hl.exe" 'On veut lancer Half life par exemple
lpCommandLine = vbNullString
lpCurrentDirectory = vbNullString
Login = "Login"    'Nom du compte sur lequel on veut se logger
Pass = "Password"   'Mot de passe pour ce compte

return_value = CreateProcessWithLogon(StrPtr(Login), StrPtr(lpDomain), StrPtr(Pass), LOGON_WITH_PROFILE, StrPtr(app_to_run), StrPtr(lpCommandLine), CREATE_DEFAULT_ERROR_MODE, ByVal 0&, StrPtr(lpCurrentDirectory), Startup, ProcessInf)

End Sub

Conclusion :


Vous pouvez mettre form1.visible à false et l'utilisateur aura l'impression d'avoir cliqué sur un simple raccourci

A voir également

Ajouter un commentaire

Commentaires

eliam77
Messages postés
9
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
18 avril 2007
-
vous avez la meme chose pour visual basic 2005 a tout hazard ? :)
cs_regisgb
Messages postés
2
Date d'inscription
samedi 8 mars 2003
Statut
Membre
Dernière intervention
13 septembre 2016
-
Ajoute un espace devant. Exemple : lpCommandLine = " /TOTO"
cs_Douns
Messages postés
100
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
19 septembre 2005
-
Bonjour,

Petite question et si on veut passer quelques chose en ligne de commande? Je suppose qu'il suffit de remplir lpCommandLine par notre commande.
Mais après plusieurs essais, cela ne fonctionne pas. J'ai même essayé de passer la ligne de commande dans app_to_run ("mon_appli.exe" /i).
Quelqu'un pourrait il m'aider?
cs_DarkSun
Messages postés
17
Date d'inscription
mardi 22 janvier 2002
Statut
Membre
Dernière intervention
24 février 2008
-
ah oui aussi, jeff007, les declarations de constantes genre LOGON_WITH_PROFILE ne manquent pas, il faut juste mettre public a la place de private...;)
cs_DarkSun
Messages postés
17
Date d'inscription
mardi 22 janvier 2002
Statut
Membre
Dernière intervention
24 février 2008
-
en effet cela ne fonctionne pas sur windows 2000, pour que ca marche sur XP et 2000, mettre :

Public Type STARTUPINFO
cb As Long
lpReserved As Long ' must be Long for Unicode string
lpDesktop As Long ' must be Long for Unicode string
lpTitle As Long ' must be Long for Unicode string
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

voila :)

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.