具有模拟/委派功能的ManagementClass(.NET)在所有远程计算机上均有效,但在本地计算机上则失败

时间:2019-03-08 19:03:53

标签: c# process wmi launch

在远程计算机上启动进程时,需要在特定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在非常不同的情况下遇到了类似的问题,但是正如您在评论中所看到的那样,建议的操作无济于事。

有没有解决方法?

0 个答案:

没有答案