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

时间:2014-05-22 17:26:58

标签: c# wcf wmi

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

System.ServiceModel.CommunicationException:服务端点无法侦听URI' net.tcp:// localhost / blah'因为访问被拒绝了。验证当前用户是否在SMSvcHost.exe.config的相应allowAccounts部分中被授予访问权限。 ---> System.ComponentModel.Win32Exception:访问被拒绝

我意识到如果没有为当前用户正确配置端口共享,这将是同样的例外,所以我只想再次强调已配置端口共享,因此希望避免回答请参阅解释如何设置的链接。已添加单个用户帐户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对象时,它会获得上述异常并死掉。

0 个答案:

没有答案