由Windows服务启动的程序出现问题。
流程是
Restart()
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);
}
}
答案 0 :(得分:4)
尝试使用
UseShellExecute = false
众所周知,它可以解决这个问题
答案 1 :(得分:1)
您可以尝试在代码中设置UseShellExecute = false
。
我很久以前就记得一些自己的问题,我甚至重新编译了原始的.NET框架代码,发现设置这个标志使用了一种完全不同的启动方法。
对我而言,您的案件中似乎不需要UseShellExecute = true
。
如果这不起作用,您应该检查安全上下文/ GPO设置,例如 “此服务是以SYSTEM还是(域)用户身份运行?”
此外,请确保在尝试重新启动时,所有其他组件的新EXE都已“准备就绪”(可能您使用的后台线程未完成)。
答案 2 :(得分:0)
我对运行在IIS上的Web应用程序调用的可执行文件有类似的问题。在我的情况下,解决方案是重新启动应用程序池以连接到当前的Web应用程序。