2009-07-22 11 views
30

Esiste un modo per indicare al mio codice di essere eseguito come un altro utente?Esegui codice come utente diverso (C#)

Sto chiamando NetUserSetInfo tramite un PInvoke e ho bisogno di chiamarlo come un altro utente. C'è un modo per farlo?

risposta

10

Questo article spiega abbastanza succintamente:

Ecco un frammento di codice da questo articolo:

IntPtr accessToken = IntPtr.Zero; 
.... 
//You have to initialize your accessToken with API calling 
.... 
WindowsIdentity identity = new WindowsIdentity(accessToken); 
WindowsImpersonationContext context = identity.Impersonate(); 
... 
// Now your code is using the new WindowsLogin and you can do what ever this login can do 
... 

//Now you can return to your current login of Windows 
context.Undo(); 
+2

Il codice nell'articolo è sparito. –

20

Probabilmente il migliore e il più pulito code che ho visto finora è questo

using (Impersonation.LogonUser(domain, username, password, logonType)) 
{ 
    // do whatever you want as this user. 
} 

Basta seguire Github o Nuget.

+1

Questo è stato certamente facile da implementare ma non posso confermare che funzioni. Faccio un process.start ("cmd.exe") e il processo continua a essere di proprietà dell'ID che ha avviato il programma, non l'ID rappresentato. Cosa potevo mancare? –