求大佬帮忙写个自动更新,并删除自身的例子。
目前我的软件启动后,可以自动读取版本信息,版本信息中会包括版本号、更新链接的。如果发现版本号不一致,执行自动更新,但是不会写火山的自动更新并删除自身的方法,也就是更新完毕删除旧版本软件。
麻烦大佬写个例子看看。 <p>后续加到模块里面</p>
<pre><code><火山程序 类型 = "通常" 版本 = 1 />
方法 程序_重启 <公开 静态 注释 = "重启当前程序" 折叠 @输出名 = "ReStartMySelf">
参数 参_窗口方式 <类型 = 整数 注释 = "可空:默认为正常。" 注释 = "说明:重启后,窗口的显示方式。" 注释 = "0、普通激活方式;1、隐藏窗口;2、最小化窗口、3、最大化窗口"
@输出名 = "showCmd" @默认值 = 0>
参数 参_重启延时 <类型 = 整数 注释 = "默认为1秒,最快" @默认值 = 1>
{
变量 局_命令 <类型 = 文本型
值 = "@echo off \r\n@ping 127.0.0.1 -n {秒数} >nul\r\nstart \"\" \"{文件名}\"\r\ndel Restart.bat">
子文本替换 (局_命令, "{秒数}", 到文本 (参_重启延时))
子文本替换 (局_命令, "{文件名}", 文件_到短文件名 (取运行目录 () + 取执行文件名 ()))
写到文件 (取运行目录 () + "Restart.bat", 文本A_到字节集 (局_命令))
文件_执行 (取运行目录 () + "Restart.bat", , 参_窗口方式)
进程_结束2 ()
}
方法 程序_删除自身 <公开 静态 注释 = "删除自身" 折叠 @输出名 = "DelMySelf">
{
变量 局_命令 <类型 = 文本型
值 = "Dim fso\r\nSet fso = CreateObject(\"Scripting.FileSystemObject\")\r\nWscript.Sleep(1000)\r\nfso.DeleteFile(\"{fileName1}\")\r\nfso.DeleteFile(\"{fileName2}\")">
子文本替换 (局_命令, "{fileName1}", 取运行目录 () + 取执行文件名 ())
子文本替换 (局_命令, "{fileName2}", 取运行目录 () + "tem.vbs", , , )
写到文件 (取运行目录 () + "tem.vbs", 文本到字节集 (局_命令))
文件_执行 (取运行目录 () + "tem.vbs")
进程_结束2 ()
}
方法 文件_执行 <公开 静态 类型 = 逻辑型 注释 = "执行文件夹或文件或命令" 返回值注释 = "成功返回真,失败返回假" 折叠 折叠2 @输出名 = "ShellExecFile"
@禁止流程检查 = 真>
参数 参_文件名 <类型 = 文本型 注释 = "欲操作(文件)或(文件夹的名称)或(网址)" @输出名 = "filePath">
参数 参_命令行 <类型 = 文本型 注释 = "执行文件的命令行,没有则设为空" @默认值 = "" @输出名 = "commandLine">
参数 参_窗口方式 <类型 = 整数 注释 = "0、普通激活方式;1、隐藏窗口;2、最小化窗口、3、最大化窗口" @输出名 = "showCmd" @默认值 = 0>
{
@ int windowShowCmd;
@ switch (showCmd) {
@ case 0: // 普通激活方式
@ windowShowCmd = SW_SHOWNORMAL;
@ break;
@ case 1: // 隐藏窗口
@ windowShowCmd = SW_HIDE;
@ break;
@ case 2: // 最小化窗口
@ windowShowCmd = SW_SHOWMINIMIZED;
@ break;
@ case 3: // 最大化窗口
@ windowShowCmd = SW_SHOWMAXIMIZED;
@ break;
@ default: // 默认为普通激活方式
@ windowShowCmd = SW_SHOWNORMAL;
@ break;
@ }
// 调用 ShellExecuteW 函数
@ HINSTANCE result = ShellExecuteW(
@ NULL, // 父窗口句柄 (NULL 表示没有父窗口)
@ L"open", // 操作 (这里我们指定 "open")
@ filePath, // 要执行的文件路径
@ commandLine, // 传递给应用程序的命令行参数 (可以是 NULL)
@ NULL, // 默认目录 (NULL 表示使用当前目录)
@ showCmd // 窗口显示方式
@ );
@ // 检查 ShellExecuteW 是否成功执行
@ if (result <= (HINSTANCE)32) {
@ // 如果返回值小于等于 32,则表示出错
@ return false;
@ }
@ return true;
}
</code></pre>
学习一下看看大老的办法
页:
[1]