2015-02-12 4 views
2

Ошибка в программе, запущенной службой Windows.System.ComponentModel.Win32Exception (0x80004005): не поддерживается такой интерфейс

Поток процесса

  • ех запускает
  • переименовывают себя * .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

+0

Трассировка стека рассказывает историю. –

ответ

0

Вы можете попытаться установить UseShellExecute = false в свой код.

Я помню некоторые свои проблемы давно, где я даже перекомпилировал исходный код платформы .NET, чтобы узнать, что установка этих флагов использует совершенно другой способ запуска.

Для меня, похоже, вам не нужен UseShellExecute = true в вашем случае.

Если это не сработает, вы должны проверить настройки контекста контекста/объекта групповой политики, например. «Эта служба работает как SYSTEM или (домен) пользователя?»

Также убедитесь, что ваш новый EXE со всеми дополнительными компонентами «готов» в то время, когда вы пытаетесь его перезапустить (возможно, вы используете фоновый поток, который не был завершен).

2

Попробуйте использовать

UseShellExecute = false 

Его, как известно, чтобы исправить эту проблему

Смежные вопросы