我有一个更新程序,一旦检测到更新(从远程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'被拒绝。
然而,该程序的新版本将下载。
答案 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();
}