在远程计算机上启动进程时,需要在特定Windows域帐户下运行所述进程,我使用类似于以下代码:
new ManagementClass(
new ManagementScope(
String.Format("\\\\{0}\\root\\cimv2","machine_name"),
new ConnectionOptions{
Username="username",
Password="password",
Impersonation=ImpersonationLevel.Delegate,
Authentication= AuthenticationLevel.Default,
EnablePrivileges=false
}
),
new ManagementPath("Win32_Process"),
null
).InvokeMethod("Create",new String[]{"process_name.exe"});
这可以正常工作,但在尝试在本地计算机上启动进程时抛出异常,即在运行启动代码的同一台计算机上。该错误消息非常清楚地说明了问题的性质:System.Management.ManagementException: User credentials cannot be used for local connections
可以肯定的是,通过取消用户名和密码字段可以使呼叫成功。
到目前为止,此限制并不是真正的问题,因为事实证明,当我需要在本地计算机上启动进程时,我不介意该进程与启动程序代码在同一帐户下运行。因此,该程序的逻辑会检测我们是否将本地计算机作为目标,如果是,则只需将用户名和密码归零即可。
您可能已经猜到了,我目前处于一种情况,需要使用具有已知用户名/密码的其他Windows帐户在本地计算机上启动进程。但是我不确定如何克服这种奇怪的局限性,即无法与用户名/密码一起使用本地计算机的ManagementScope。
我当然可以使用Process.Start()做到这一点,但是我已经清楚地知道,使用ManagementClass是此项目上的首选操作。
回到2011年,this guy在非常不同的情况下遇到了类似的问题,但是正如您在评论中所看到的那样,建议的操作无济于事。
有没有解决方法?