System.ComponentModel.Win32Exception(0x80004005):不支持此类接口

时间:2015-02-12 05:13:37

标签: c# .net process windows-server-2008

由Windows服务启动的程序出现问题。

流程是

  • exe启动
  • 将自己重命名为* .bak
  • 下载自己的最新版本
  • 致电Restart()
  • 执行大量文件和SQL操作(更新我们的主要软件套件)
  • 然后调用Restart()
  • 处理流程再次开始。如果主套件没有软件更新,则不会重新启动

除一个客户网站

外,这一切都很完美

在一个站点上,第一个Restart()正常工作,但第二个总是抛出异常。

  

System.ComponentModel.Win32Exception(0x80004005):不支持此类接口      在System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)     在System.Diagnostics.Process.Start()    在UpdateCompanionService.Program.Restart()

它是WS2008标准服务器。

public static void Restart()
{
  try
  {
      var procPath = Path.Combine(Config.UpdateCompanionDirectory, "UpdateCompanionService.exe");
      Logger.Debug("Starting procecss {0}", procPath);

      var proc = new Process
      {
          StartInfo = {FileName = procPath, WorkingDirectory = Config.UpdateCompanionDirectory, Arguments = "/noupdate", UseShellExecute = true}
      };

      proc.Start();
      Environment.Exit(-1);
  }
  catch (Exception e)
  {
      Logger.Fatal("Error restarting update companion", e);
  }
}

3 个答案:

答案 0 :(得分:4)

尝试使用

    UseShellExecute = false 

众所周知,它可以解决这个问题

答案 1 :(得分:1)

您可以尝试在代码中设置UseShellExecute = false

我很久以前就记得一些自己的问题,我甚至重新编译了原始的.NET框架代码,发现设置这个标志使用了一种完全不同的启动方法。

对我而言,您的案件中似乎不需要UseShellExecute = true

如果这不起作用,您应该检查安全上下文/ GPO设置,例如 “此服务是以SYSTEM还是(域)用户身份运行?”

此外,请确保在尝试重新启动时,所有其他组件的新EXE都已“准备就绪”(可能您使用的后台线程未完成)。

答案 2 :(得分:0)

我对运行在IIS上的Web应用程序调用的可执行文件有类似的问题。在我的情况下,解决方案是重新启动应用程序池以连接到当前的Web应用程序。