C# System.ComponentModel.Win32Exception(0x80004005):不支持此类接口
windows服务启动的程序出现问题 工艺流程如下: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):不支持此类接口 在
- 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您是如何得出他的机器“完全损坏”的结论的?堆栈跟踪说明了这一点。