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

C# System.ComponentModel.Win32Exception(0x80004005):不支持此类接口,c#,.net,process,windows-server-2008,C#,.net,Process,Windows Server 2008,windows服务启动的程序出现问题 工艺流程如下: exe启动 将自身重命名为*.bak 下载其自身的最新版本 调用Restart() 执行一系列文件和SQL操作(更新我们的主软件套件) 然后调用Restart() 流程重新开始。如果主套件没有软件更新,则不会重新启动 除了一个客户站点之外,这一切都很完美 在一个站点上,第一个Restart()可以工作,但第二个总是抛出异常 System.ComponentModel.Win32Exception(0x80004005):不支持此类接口 在

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);
  }
}

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

我记得很久以前我自己也遇到过一些问题,我甚至重新编译了原始的.NET framework代码,发现设置此标志使用了完全不同的启动方法

对我来说,在您的情况下,似乎不需要
UseShellExecute=true

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

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

尝试使用

    UseShellExecute = false 

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

我在IIS上运行的Web应用程序调用的可执行文件方面也遇到了类似的问题。在我的例子中,解决方案是重新启动当前Web应用程序的应用程序池。

@HansPassant您是如何得出他的机器“完全损坏”的结论的?堆栈跟踪说明了这一点。