2013-08-29 5 views
0

Не уверен, что это хорошая практика, но нести меня.переписать текущий exe из процесса

У меня есть URL-адрес с новой версией моего приложения, я не хочу использовать какие-либо средства обновления для этого.

У меня 2 приложения. 1 приложение загружает последнюю версию приложения, назовите его «Updater» консольным приложением. Другое приложение - «MainApp». Я хочу вызвать приложение Updater из MainApp, чтобы заменить MainApp на загруженное приложение.

MessageBox.Show("We need to update the application. This might take a short while"); 

    System.Diagnostics.Process updateProcess = new System.Diagnostics.Process(); 
    updateProcess.StartInfo.FileName = AppDomain.CurrentDomain.BaseDirectory + "Updater.exe"; 
    updateProcess.StartInfo.Arguments = AppDomain.CurrentDomain.BaseDirectory; 
    updateProcess.Start(); 
    Process.GetCurrentProcess().Kill(); 
    //Application.Exit(); 

Программа обновления приложение получает новую версию файла из аргументов, переданных в рабочей директорию на MainApp и сохраняет его, код ниже

 client.BaseUrl = base_url + "MainApp.exe"; 
     var request = new RestRequest(Method.GET); 
     byte[] responseData = client.DownloadData(request); 
     System.IO.File.WriteAllBytes(args[0] + "MainApp.exe", responseData); 

Это не кажется, вполне работают. Он не перезаписывает приложение!

Любые предложения?

+3

Именно поэтому у вас есть ваша пусковая установка, запускающее основное приложение, вместо того, чтобы ваше основное приложение запускало вашу пусковую установку. – Servy

+0

Да, очень верно и логически правильно, но как я могу сделать это так, как мне нужно, как выше. – user1320651

+0

Что я делал до загрузки новой версии, я бы переименовал текущий исполняемый файл (как часть процесса обновления - вы можете сделать это даже во время его работы) - затем загрузите новую версию с исходным именем файла, а затем удалите переименованный файл. –

ответ

0

Я достиг этого, имея «Перезагрузка для обновления» кнопку в главном приложении, которое выполняет следующие действия:

  1. запустить обновление с помощью переключателя, содержащего PID основного процесса.
  2. Основной процесс начинает закрываться.
  3. Обновитель находит процесс с заданным PID и ждет его выхода.
  4. Обновитель перезаписывает основное приложение с новой версией.
  5. Обновление запускает основное приложение.
  6. Обновление отключается.
+0

Как проверить, завершен ли процесс? – user1320651

+0

Процесс p = Process.GetProcessById ("1234"); Извините, переписан ваш комментарий Ming Slogar – user1320651

+0

Process currentProcess = Process.GetCurrentProcess(); полагая, что это то, что я передаю правильно? – user1320651

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