一、获得远端更新文件
通过接口获取对应需要下载的包(文件夹、文件),保存在下载文件夹下 /download,代码自己搞。。。
二、Process 执行bat文件
代码如下(示例):
Process proc = null;
string targetDir = Application.StartupPath;
if (!File.Exists(targetDir + "/123.bat")) return;
try
{
proc = new Process();
proc.StartInfo.WorkingDirectory = targetDir;
proc.StartInfo.FileName = "123.bat";
proc.StartInfo.CreateNoWindow = false;
proc.Start();
}
catch (Exception ex)
{
#if DEBUG
Console.WriteLine(ex.Message);
#endif
}
二、bat文件详情
代码如下(示例):
@echo off
::隐藏窗口
:: if "%1"=="hide" goto CmdBegin
:: start mshta vbscript:createobject("wscript.shell").run("""%~0"" hide",0)(window.close)&&exit
:: :CmdBegin
::提权
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d "%~dp0"
:: 进入当前目录
cd %~dp0
tasklist | find /i "FormMain.exe"
if %errorlevel%==0 (
echo 正在关闭更新程序...
taskkill /f /im FormMain.exe
echo 关闭更新程序完成...
)
echo 正在更新程序...
timeout /t 3
::更新文件夹
if exist "download/" (
echo 有更新文件,正在更新文件...
xcopy download\ \ /s /e /c /y /h /r
echo 更新文件完成...
)
echo 正在启动程序...
timeout /t 3
::重新打开exe,最小化 (其他相关参数自己查询文档)
start /min "" "FormMain.exe"
echo 更新启动成功
:: echo. & pause
exit
总结
关于更新exe,一般都是采用一个子程序来监听主程序,这个子更新程序一般无改动;由于业务需求,需要更新自身程序,想到这么一个解决思路,各位大佬有其他方案,欢迎留言共同讨论!