2015-02-12 294 views
2

遇到由Windows服務啓動的程序問題。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); 
    } 
} 
+0

@HansPassant? – BoldAsLove 2015-02-14 02:58:15

+0

堆棧跟蹤告訴故事。 – 2015-02-14 08:38:21

回答

0

您可以嘗試在代碼中設置UseShellExecute = false

我記得很久以前的一些自己的問題,我甚至重新編譯了原始的.NET框架代碼,發現設置這個標誌使用了一種完全不同的啓動方法。

對我來說,你似乎不需要UseShellExecute = true在你的情況。

如果這不起作用,您應該檢查安全上下文/ GPO設置,例如, 「此服務是以系統還是(域)用戶身份運行?」

還要確保在嘗試重新啓動它時(也許您使用未完成的後臺線程),您的新EXE和所有其他組件都已「準備就緒」。

2

嘗試使用

UseShellExecute = false 

它已經知道你是怎麼得出這個結論,他的機器「非常壞」來解決這個問題

相關問題