是否可以在没有 Windows 服务的情况下使用服务帐户(域)在不同的用户(模拟)下运行代码?
Posted
技术标签:
【中文标题】是否可以在没有 Windows 服务的情况下使用服务帐户(域)在不同的用户(模拟)下运行代码?【英文标题】:Is running code under a different user (impersonation) possible with a service account (domain) without a windows service? 【发布时间】:2020-07-16 11:35:09 【问题描述】:我们希望在服务帐户的上下文中运行一个进程。 是否可以在没有 Windows 服务的情况下使用服务用户帐户(域)模拟 WPF 应用程序中的方法(使用 Process.Start)?
如果可能,如何实现?
【问题讨论】:
正在尝试不同的方法,但仍然收到消息:“登录失败:用户在此计算机上没有所需的登录类型” 我们的方法的复杂之处在于,我们有非管理员用户并且想要使用服务用户帐户来处理网络共享上的操作。但我认为问题在于,服务用户无权登录机器...... 【参考方案1】:操作:
可以在没有 Windows 服务的情况下使用服务用户帐户(域)模拟 WPF 应用程序中的方法(使用 Process.Start)吗?
无论调用进程是什么类型,您都可以模拟用户。即 WPF、Windows 服务、控制台应用程序。不要紧。但是,在 Windows Vista 及更高版本上,该进程必须以管理员的身份运行。
示例由MSDN提供
string userName, domainName;
// Get the user token for the specified user, domain, and password using the
// unmanaged LogonUser method.
// The local machine name can be used for the domain name to impersonate a user on this machine.
Console.Write("Enter the name of the domain on which to log on: ");
domainName = Console.ReadLine();
Console.Write("Enter the login of a user on 0 that you wish to impersonate: ", domainName);
userName = Console.ReadLine();
Console.Write("Enter the password for 0: ", userName);
...
// Call LogonUser to obtain a handle to an access token.
bool returnValue = LogonUser(userName, domainName, Console.ReadLine(),
LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
out safeTokenHandle);
...
using (safeTokenHandle)
...
using (WindowsIdentity newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle()))
using (WindowsImpersonationContext impersonatedUser = newId.Impersonate())
// Check the identity.
Console.WriteLine("After impersonation: "
+ WindowsIdentity.GetCurrent().Name);
有关更多信息和完整示例,我建议查看上面的链接,因为我不想引用整个示例。
更多
WindowsImpersonationContext Class Impersonating and Reverting【讨论】:
感谢您的快速回复!如何通过指定服务用户的用户名、密码来做到这一点? @SiL3NC3,不客气。哎呀,我忘了包括重要的开始位 - 用户名/密码的来源。 见编辑。在您的 WPF 应用程序中,您可以让用户在登录窗口中指定它或对其进行硬编码 非常适合添加此内容。 :) 模拟总是需要管理员权限吗?或者有没有办法没有它?并非所有域用户都拥有它们...将查看提供的链接。谢谢。 @SiL3NC3 遗憾地仅适用于 pre-Vista 那我有麻烦了... ;) 谢谢你提供信息,伙计。以上是关于是否可以在没有 Windows 服务的情况下使用服务帐户(域)在不同的用户(模拟)下运行代码?的主要内容,如果未能解决你的问题,请参考以下文章
如果类与客户端一起分发,是不是可以在没有 HTTP 服务器的情况下使用分布式 RMI?
是否可以在没有 Windows 10 专业版的情况下使用 Docker?
是否可以在没有 GATT 的情况下实施 Proximity Profile?
是否可以在没有 Windows 商店且没有旁加载的情况下安装经过微软认证的 appx?