2010-08-19 4 views
1

Я пишу небольшой обновитель для своего приложения. Мой поток будет выглядеть так: app.exe -> процесс вызова (updater.exe) -> app.close() Затем программа обновления проверяет, закрыто ли приложение, а затем перезаписывает app.exe и другие сборки спутников.Консольное приложение запускает процесс, затем закрывает себя

Так что мне нужно сделать что-то вроде этого: запустите приложение C# exe, запустите процесс для updater.exe, затем закройте приложение, но не закрывайте дочерний процесс.

Есть способ построить этот процесс пожаротушения и забывания в .NET?

Спасибо, Nando

ответ

3

Посмотрите на Process объекта. Вы бы просто позвонить Process.Start так:

System.Diagnostics.Process.Start("updater.exe"); 
+0

Благодарим вас, пожалуйста, прочтите мой ответ ниже. –

0

Да, я делаю так, но, кажется, что процесс не начать ...

Я сделал небольшой вспомогательный класс, называемый Updater:

Updater.CheckUpdates() 

-> запускает процесс, который называют «updater.exe -check», и это работает (когда процесс закончен, контроль возврата к моему основному приложению). Я оцениваю код возврата процесса, и при необходимости я устанавливаю флаг Updater.UpdatesAvalilable bool.

Updater.ApplyUpdates() 

-> Процесс, который вызывает «updater.exe -update», который выполняет обновление.

Итак, мой код выглядит так:

Updater.CheckUpdates(); 
    if (Updater.UpdatesAvailable) 
    { 
     Updater.ApplyUpdates(); 
     System.Environment.Exit(0); 
    } 

процесса в Updater.ApplyUpdates() никогда не закончатся. Я знаю, это не элегантный код, но я не знаю, как достичь своей цели. :-)

Спасибо! Nando

0

Доброе утро, ребята. Я нашел способ заставить его работать, кажется. В моем классе-помощнике я подключил события для получения stdIO и stdError, просто чтобы что-то записать; удалив их, я проделаю свою работу: начало процесса и главный выход! :-)

Просто, чтобы все об этом знают: мое заявление процесс теперь так:

  Process process = new Process(); 
     process.EnableRaisingEvents = true; 

     process.StartInfo = new ProcessStartInfo(); 
     process.StartInfo.Arguments = "-update"; 
     process.StartInfo.CreateNoWindow = true; 
     process.StartInfo.ErrorDialog = false; 
     process.StartInfo.FileName = "updater.exe"; 
     process.StartInfo.UseShellExecute = false; 
     process.StartInfo.WorkingDirectory = Directory.GetCurrentDirectory(); 

     process.Start(); 

Спасибо всем! Nando

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