/ / sobrescrever exe atual do processo - c #, console

sobrescrever atual exe do processo - c #, console

Não tenho certeza se isso é uma boa prática, mas tenha paciência comigo.

Eu tenho um URL com uma nova versão do meu aplicativo, não quero usar nenhuma ferramenta de atualização para fazer isso.

Eu tenho 2 aplicativos. Se um aplicativo baixar a versão mais recente, chame-o de "Atualizador", um aplicativo de console. O outro aplicativo é o "MainApp". Quero chamar o aplicativo Updater do MainApp para substituir o MainApp pelo aplicativo baixado.

  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();

O aplicativo Updater busca a nova versão do arquivo dos argumentos passados ​​para o diretório de trabalho do MainApp e o salva, código abaixo

        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);

Isso não parece funcionar muito bem. Ele não substitui o aplicativo!

Alguma sugestão?

Respostas:

0 para resposta № 1

Consegui isso com um botão "Reiniciar para atualizar" no aplicativo principal, que executa as seguintes etapas:

  1. Inicie o atualizador com uma opção que contém o PID do processo principal.
  2. O processo principal começa a desligar.
  3. O atualizador encontra o processo com o PID especificado e aguarda a saída.
  4. O atualizador substitui o aplicativo principal pela nova versão.
  5. O atualizador inicia o aplicativo principal.
  6. O atualizador é desligado.