我已经设法让我的应用程序检查更新与一个WebService在我的服务器上,它会看看是否有任何更新是作出.但真实的的问题,我现在面临的是,我不知道如何下载我的应用程序的.exe的更新版本,并取代目前我正在运行的.总之,我需要知道如何下载我的应用程序的.exe的更新版本,并替换我正在运行的当前版本。
WebService
.exe
wa7juj8i1#
实际上,您需要创建一个单独的进程来处理更新步骤。我曾经开发过一个桌面应用程序,它能够从Web服务器接收更新,我通过创建一个不同的进程来实现这一点,该进程充当主应用程序的主入口点。它启动主应用程序进程,同时它保持运行以检查更新。然后,如果有任何可用的更新,它将它们下载到一个临时文件夹,之后,它在关闭主应用程序之前通知它,然后它提交新的更新并再次重新启动主应用程序。但是如果你想坚持使用一个可执行文件和一个进程,我想你不能替换任何正在运行的可执行文件,这是操作系统本身不允许的。
hl0ma9xz2#
您需要创建一个单独的引导应用程序来为您做这项工作,否则应用程序将运行,因此操作系统将阻止您覆盖它。
e5nqia273#
其实有办法,我几年前就发现了无法删除当前正在执行的.exe程序文件。但可以移动它。因此,我将更新文件从Web服务器下载到/updates/myprogram. exe然后我1)文件。删除任何以前的myprogram.bak文件2)文件。将myprogram.exe移动到myprogram.bak。3)文件。将/updates/myprogram. exe复制到/myprogram. exe位置。4)询问用户是否要重新启动,调用Application.Restart()瞧。问题在你的主程序中解决了。不需要一个 Boot 程序。
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);
4条答案
按热度按时间wa7juj8i1#
实际上,您需要创建一个单独的进程来处理更新步骤。我曾经开发过一个桌面应用程序,它能够从Web服务器接收更新,我通过创建一个不同的进程来实现这一点,该进程充当主应用程序的主入口点。
它启动主应用程序进程,同时它保持运行以检查更新。然后,如果有任何可用的更新,它将它们下载到一个临时文件夹,之后,它在关闭主应用程序之前通知它,然后它提交新的更新并再次重新启动主应用程序。
但是如果你想坚持使用一个可执行文件和一个进程,我想你不能替换任何正在运行的可执行文件,这是操作系统本身不允许的。
hl0ma9xz2#
您需要创建一个单独的引导应用程序来为您做这项工作,否则应用程序将运行,因此操作系统将阻止您覆盖它。
e5nqia273#
其实有办法,我几年前就发现了
无法删除当前正在执行的.exe程序文件。但可以移动它。
因此,我将更新文件从Web服务器下载到/updates/myprogram. exe
然后我1)文件。删除任何以前的myprogram.bak文件2)文件。将myprogram.exe移动到myprogram.bak。3)文件。将/updates/myprogram. exe复制到/myprogram. exe位置。4)询问用户是否要重新启动,调用Application.Restart()
瞧。问题在你的主程序中解决了。不需要一个 Boot 程序。
hgqdbh6s4#
您可以使用CMD来取代执行中的exe档案,而不用其他程序。首先,您必须执行MyApp.exe。MyApp.exe必须检查更新、下载并解压缩档案至%AppData%//Temp文件夹。然后,MyApp.exe会启动CMD命令(请参阅下文),关闭旧版的MyApp.exe、复制所有档案至MyApp.exe文件夹,并启动新版的MyApp.exe。因此,CMD就像是安装程式。