覆盖进程中的当前exe

时间:2013-08-29 17:15:05

标签: c# console

不确定这是不是很好的做法,但请耐心等待。

我有一个带有我的应用程序新版本的网址,我不想使用任何更新程序工具来执行此操作。

我有2个应用。 1个应用程序下载最新版本的应用程序,称其为“更新程序”控制台应用程序。另一个应用程序是“MainApp”。我想从MainApp调用Updater应用程序,用下载的应用程序替换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();

Updater应用程序从传递给MainApp工作目录的args中提取文件的新版本并保存,代码如下

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

这似乎不太合适。它没有覆盖应用程序!

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我通过在主应用程序中使用“重新启动更新”按钮来完成此操作,该按钮执行以下步骤:

  1. 使用包含主进程的PID的开关启动更新程序。
  2. 主要过程开始关闭。
  3. updater找到具有给定PID的进程并等待它退出。
  4. 更新程序用新版本覆盖主应用程序。
  5. 更新程序启动主应用程序。
  6. 更新程序关闭。