C# 通过WMI生成的远程进程无法访问Net.Tcp端口共享

C# 通过WMI生成的远程进程无法访问Net.Tcp端口共享,c#,wcf,wmi,C#,Wcf,Wmi,我们的应用程序需要在远程机器上(与客户端机器位于同一域下)生成一个进程,作为当前(非管理员)用户,并让该远程进程通过WCF与客户端通信。我们正在使用System.Management下的WMI类启动远程进程。我的问题是,当以这种方式启动时,远程进程在尝试使用Net.Tcp端口共享服务时遇到拒绝访问错误。我们对Windows下的WCF和TCP端口共享问题有相当丰富的经验,并且知道在尝试修改SMSvcHost.exe.config时可能遇到的各种陷阱。同样的过程,与同一用户在同一台机器上手动运行,工

我们的应用程序需要在远程机器上(与客户端机器位于同一域下)生成一个进程,作为当前(非管理员)用户,并让该远程进程通过WCF与客户端通信。我们正在使用System.Management下的WMI类启动远程进程。我的问题是,当以这种方式启动时,远程进程在尝试使用Net.Tcp端口共享服务时遇到拒绝访问错误。我们对Windows下的WCF和TCP端口共享问题有相当丰富的经验,并且知道在尝试修改SMSvcHost.exe.config时可能遇到的各种陷阱。同样的过程,与同一用户在同一台机器上手动运行,工作正常。只有通过WMI启动时,才会出现问题。确切的例外是:

System.ServiceModel.CommunicationException:服务端点未能侦听URI的网络。tcp://localhost/blah'因为访问被拒绝。验证当前用户是否被授予SMSvcHost.exe.config的相应allowAccounts部分的访问权限。-->System.ComponentModel.Win32异常:访问被拒绝

我意识到,如果端口共享没有为当前用户正确配置,您也会遇到同样的异常情况,因此我只想再次强调,端口共享已经配置,因此我希望避免回答那些指向解释如何设置它的链接的问题。已添加单个用户帐户SID及其多个组。此问题特别与通过WMI远程生成的进程有关。我假设WMI派生的进程必须具有一些稍微不同的安全上下文,这些上下文阻止它访问端口共享,但我无法确定关键区别是什么

以下是生成远程进程的客户端代码:

private void SpawnRemoteService(string host, string cmd, string args)
{
  ManagementScope scope = new ManagementScope(@"\\" + host + @"\root\cimv2");

  var path = new ManagementPath("Win32_Process");

  using (var proc = new ManagementClass(scope, path, null))
  {
    using (var start = new ManagementClass("Win32_ProcessStartup"))
    {
      using (var createParams = proc.GetMethodParameters("Create"))
      {
        createParams["CommandLine"] = String.Format("{0} {1}", cmd, args);
        createParams["ProcessStartupInformation"] = start;
        using (var ret = proc.InvokeMethod("Create", createParams, null)) ;
      }
    }
  }
}

远程进程启动,但当它尝试创建ServiceHost对象时,它会收到上述异常并终止。

我也有同样的问题。你找到解决办法了吗?