我一直在尋找一種方式來更新我的應用程序的年齡,並且還沒有找到解決方案。 (請不要說ClickOnce,它不適合這個應用程序)。這個應用程序是如何更新自身的?
幾年前,我曾經使用MCadmin來運行一個Minecraft服務器,我記得它剛開始的時候,有時候會說「更新下載,請重新啓動!」。我試圖找出這是如何完成的,所以我一直在尋找源代碼並找到了一些東西。
下面是一些代碼,我發現:
private void CheckUpdateThread()
{
Program.AddRTLine(Color.Green, "Verifying existence of essential files...\r\n", false);
if (!File.Exists("ICSharpCode.SharpZipLib.dll"))
Util.DownloadURLToFile("https://internal.mcadmin.eu/ICSharpCode.SharpZipLib.dll", "ICSharpCode.SharpZipLib.dll");
if (!File.Exists("LICENSE.txt"))
Util.DownloadURLToFile("https://internal.mcadmin.eu/LICENSE.txt", "LICENSE.txt");
Program.AddRTLine(Color.Green, "Essential file validation completed!\r\n", false);
if (Program.dontUpdate)
{
Program.AddRTLine(Color.Green, "Update checking disabled!!!\r\n", false);
return;
}
UpdateRunning = true;
Program.AddRTLine(Color.Green, "Checking for updates...\r\n", false);
bool isUpdate;
if (Program.dontUpdateMCAdmin || 1 == 1)
{
Program.AddRTLine(Color.Green, "MCAdmin update checking disabled.\r\n", false);
}
else
{
isUpdate = Util.DownloadURLToAndDiff("https://internal.mcadmin.eu/MCAdmin.exe", "MCAdmin.exe.new", "MCAdmin.exe");
if (!isUpdate)
{
if (OutOfDateMCA)
{
Program.AddRTLine(Color.Orange, "MCAdmin update downloaded! Restart MCAdmin to apply update!\r\n", false);
SendAdminMessage("MCAdmin update downloaded, consider restarting.", 4);
}
else
{
Program.AddRTLine(Color.Green, "MCAdmin already up to date!\r\n", false);
}
}
else
{
try
{
if (File.Exists("MCAdmin.exe.old"))
File.Delete("MCAdmin.exe.old");
}
catch { }
try
{
if (File.Exists("MCAdmin.exe"))
File.Delete("MCAdmin.exe");
}
catch { }
if (File.Exists("MCAdmin.exe"))
File.Move("MCAdmin.exe", "MCAdmin.exe.old");
File.Move("MCAdmin.exe.new", "MCAdmin.exe");
OutOfDateMCA = true;
Program.AddRTLine(Color.Orange, "MCAdmin update downloaded! Restart MCAdmin to apply update!\r\n", false);
SendAdminMessage("MCAdmin update downloaded, consider restarting.", 4);
}
}
此代碼是從一個叫「UpdateManager」類單無效。
看看它如何處理整個「MCadmin.exe.old」和「MCadmin.exe.new」文件,有點像影子複製。
還有更多的代碼,但我不太明白。
這裏是SVN: https://code.google.com/p/mcadminfork/source/browse/
任何人可以幫我找出這個更新是如何來達到的?
謝謝。
你確切的問題是什麼?你在代碼中看到,程序再次下載它自己的代碼庫並將其替換爲...(這沒有檢查簽名具有很高的安全風險...) – user287107