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

时间:2016-07-28 12:03:11

标签: c#

我有一个更新程序,一旦检测到更新(从远程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工具\ Conkinator-Bot.exe'被拒绝。

然而,该程序的新版本将下载。

2 个答案:

答案 0 :(得分:6)

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

clsProcess.WaitForExit();

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

答案 1 :(得分:2)

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

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