Есть ли способ сказать, что мой код запускается как другой пользователь?
Я вызываю NetUserSetInfo через PInvoke, и мне нужно называть его другим пользователем. Есть ли способ сделать это?
Есть ли способ сказать, что мой код запускается как другой пользователь?
Я вызываю NetUserSetInfo через PInvoke, и мне нужно называть его другим пользователем. Есть ли способ сделать это?
Олицетворение требует вызова некоторых собственных API (а именно LogonUser), поэтому, вероятно, не стоит размещать 3 страницы кода оболочки. Эта страница имеет полный рабочий образец: http://platinumdogs.wordpress.com/2008/10/30/net-c-impersonation-with-network-credentials/
Обратите внимание, что олицетворение имеет важные соображения безопасности. Убедитесь, что вы следуете лучшим практикам.
Вероятно, лучший и самый чистый код, который я когда-либо видел, это:
var credentials = new UserCredentials(domain, username, password);
Impersonation.RunAsUser(credentials, logonType, () =>
{
// do whatever you want as this user.
});
Эта статья объясняет это довольно кратко:
Вот фрагмент кода из статьи:
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();
Да. Олицетворение помогает запустить некоторый код в качестве другого пользователя. Он отлично работает в моем случае. (Благодаря Милану Матейке)
Я также нашел ссылку Ref. Надеюсь, это поможет вам получить пакет от nuget легко: http://iamfixed.blogspot.de/2017/11/run-code-as-different-user-in-c-from.html