2009-07-22 10 views
30

Czy istnieje sposób na poinformowanie mojego kodu, aby działał jako inny użytkownik?Uruchom kod jako inny użytkownik (C#)

Nazywam NetUserSetInfo przez PInvoke i muszę go nazwać innym użytkownikiem. Czy jest jakiś sposób na zrobienie tego?

Odpowiedz

10

Ten article wyjaśnia to dość zwięźle:

Oto fragment kodu z artykułu:

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

Kod w artykule zniknął. –

20

Prawdopodobnie najlepszy i najczystszy code które widziałem do tej pory jest to

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

Wystarczy postępować Github lub Nuget.

+1

To z pewnością było łatwe do wdrożenia, ale nie mogę potwierdzić, że działa. Wykonuję process.start ("cmd.exe"), a proces nadal jest wyświetlany jako należący do identyfikatora, który uruchomił program, a nie podanego identyfikatora. Czego mógłbym zabraknąć? –