[英]My updater is failing to close my main program (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 Tool \\ Conkinator-Bot.exe'。
然而,該程序的新版本下載。
僅僅因為主窗口關閉並不意味着過程已經結束。 關閉主窗口后,需要等待進程退出:
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.