Web Services 更新C#应用程序替换.exe文件

pexxcrt2  于 2022-11-15  发布在  C#
关注(0)|答案(4)|浏览(226)

我已经设法让我的应用程序检查更新与一个WebService在我的服务器上,它会看看是否有任何更新是作出.但真实的的问题,我现在面临的是,我不知道如何下载我的应用程序的.exe的更新版本,并取代目前我正在运行的.
总之,我需要知道如何下载我的应用程序的.exe的更新版本,并替换我正在运行的当前版本。

wa7juj8i

wa7juj8i1#

实际上,您需要创建一个单独的进程来处理更新步骤。我曾经开发过一个桌面应用程序,它能够从Web服务器接收更新,我通过创建一个不同的进程来实现这一点,该进程充当主应用程序的主入口点。
它启动主应用程序进程,同时它保持运行以检查更新。然后,如果有任何可用的更新,它将它们下载到一个临时文件夹,之后,它在关闭主应用程序之前通知它,然后它提交新的更新并再次重新启动主应用程序。
但是如果你想坚持使用一个可执行文件和一个进程,我想你不能替换任何正在运行的可执行文件,这是操作系统本身不允许的。

hl0ma9xz

hl0ma9xz2#

您需要创建一个单独的引导应用程序来为您做这项工作,否则应用程序将运行,因此操作系统将阻止您覆盖它。

e5nqia27

e5nqia273#

其实有办法,我几年前就发现了
无法删除当前正在执行的.exe程序文件。但可以移动它。
因此,我将更新文件从Web服务器下载到/updates/myprogram. exe
然后我1)文件。删除任何以前的myprogram.bak文件2)文件。将myprogram.exe移动到myprogram.bak。3)文件。将/updates/myprogram. exe复制到/myprogram. exe位置。4)询问用户是否要重新启动,调用Application.Restart()
瞧。问题在你的主程序中解决了。不需要一个 Boot 程序。

hgqdbh6s

hgqdbh6s4#

您可以使用CMD来取代执行中的exe档案,而不用其他程序。首先,您必须执行MyApp.exe。MyApp.exe必须检查更新、下载并解压缩档案至%AppData%//Temp文件夹。然后,MyApp.exe会启动CMD命令(请参阅下文),关闭旧版的MyApp.exe、复制所有档案至MyApp.exe文件夹,并启动新版的MyApp.exe。因此,CMD就像是安装程式。

var exePath = System.Reflection.Assembly.GetExecutingAssembly().Location;
var exeFolderPath = Path.GetDirectoryName(exePath);     
var command = "ping 127.0.0.1 -n 2 > nul & echo \"Done!\" & taskkill /f /t /im "
                + System.Reflection.Assembly.GetExecutingAssembly().GetName().Name 
                + ".exe & ping 127.0.0.1 -n 2 > nul & xcopy \""
                + Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 
                + "\\Temp\\\" \""+ exeFolderPath + "\" /h /i /c /k /e /r /y & call \"cmd /c start "
                + exeFolderPath + "\\"
                + System.Reflection.Assembly.GetExecutingAssembly().GetName().Name + ".exe\" & echo \"Enjoy the new version...\" & pause";

System.Diagnostics.Process.Start("CMD.exe", "/K " + command);

相关问题