我的更新程序无法关闭我的主程序(C#)

本文关键字:我的 主程序 更新 程序 | 更新日期: 2023-09-27 17:59:07

我有一个更新程序,一旦检测到更新(来自远程XML文件),它就会通过主程序调用,首先它会检查进程是否打开

if (clsProcess.ProcessName.ToLower().Contains("conkinator-bot.exe"))
{
    clsProcess.CloseMainWindow();
    return true;
}

(这将为每个进程运行,直到找到为止(foreach循环))

更新程序然后下载文件:

client.DownloadFile(url, "Conkinator-Bot-new.exe");

然后它试图删除当前的一个并将其重命名为:

File.Delete("Conkinator-Bot.exe");
File.Move("Conkinator-Bot-new.exe", "Conkinator-Bot.exe");

但当这种情况发生时,我得到的错误如下:

未处理的异常:System.UnauthorizedAccessException:拒绝访问路径"D:''Conkinator的Skype Tool''ConkinatorBot.exe"。

但是新版本的程序确实下载了。

我的更新程序无法关闭我的主程序(C#)

主窗口关闭并不意味着过程结束。关闭主窗口后,您需要等待进程退出:

clsProcess.WaitForExit();

理想情况下,您应该使用超时-可能有什么东西阻止窗口关闭,或者进程可能有错误的退出机制。

从主程序内部关闭主程序要容易得多。

  string msg = "To update the application we need to close it. Do you want to continue?";
  if (DialogResult.Yes == MessageBox.Show(msg, title, MessageBoxButtons.YesNo))
  {
     ProcessStartInfo psi = new ProcessStartInfo();
     psi.FileName = "YourUpdaterFile.exe";           
     psi.WindowStyle = ProcessWindowStyle.Normal;
     // Assuming a lot here but to just show the options available....
     psi.WorkingDirectory = Path.GetDirectoryName(Application.ExecutablePath);
     Process.Start(psi);
     Application.Exit();
  }