domingo 发表于 2024-12-23 20:26:22

求大佬帮忙写个自动更新,并删除自身的例子。

目前我的软件启动后,可以自动读取版本信息,版本信息中会包括版本号、更新链接的。

如果发现版本号不一致,执行自动更新,但是不会写火山的自动更新并删除自身的方法,也就是更新完毕删除旧版本软件。

麻烦大佬写个例子看看。

揰掵佲 发表于 2024-12-23 20:26:23

<p>后续加到模块里面</p>
<pre><code>&lt;火山程序 类型 = &quot;通常&quot; 版本 = 1 /&gt;

方法 程序_重启 &lt;公开 静态 注释 = &quot;重启当前程序&quot; 折叠 @输出名 = &quot;ReStartMySelf&quot;&gt;
参数 参_窗口方式 &lt;类型 = 整数 注释 = &quot;可空:默认为正常。&quot; 注释 = &quot;说明:重启后,窗口的显示方式。&quot; 注释 = &quot;0、普通激活方式;1、隐藏窗口;2、最小化窗口、3、最大化窗口&quot;
      @输出名 = &quot;showCmd&quot; @默认值 = 0&gt;
参数 参_重启延时 &lt;类型 = 整数 注释 = &quot;默认为1秒,最快&quot; @默认值 = 1&gt;
{
    变量 局_命令 &lt;类型 = 文本型
            值 = &quot;@echo off \r\n@ping 127.0.0.1 -n {秒数} &gt;nul\r\nstart \&quot;\&quot; \&quot;{文件名}\&quot;\r\ndel Restart.bat&quot;&gt;
    子文本替换 (局_命令, &quot;{秒数}&quot;, 到文本 (参_重启延时))
    子文本替换 (局_命令, &quot;{文件名}&quot;, 文件_到短文件名 (取运行目录 () + 取执行文件名 ()))
    写到文件 (取运行目录 () + &quot;Restart.bat&quot;, 文本A_到字节集 (局_命令))
    文件_执行 (取运行目录 () + &quot;Restart.bat&quot;, , 参_窗口方式)
    进程_结束2 ()



}

方法 程序_删除自身 &lt;公开 静态 注释 = &quot;删除自身&quot; 折叠 @输出名 = &quot;DelMySelf&quot;&gt;
{
    变量 局_命令 &lt;类型 = 文本型
            值 = &quot;Dim fso\r\nSet fso = CreateObject(\&quot;Scripting.FileSystemObject\&quot;)\r\nWscript.Sleep(1000)\r\nfso.DeleteFile(\&quot;{fileName1}\&quot;)\r\nfso.DeleteFile(\&quot;{fileName2}\&quot;)&quot;&gt;
    子文本替换 (局_命令, &quot;{fileName1}&quot;, 取运行目录 () + 取执行文件名 ())
    子文本替换 (局_命令, &quot;{fileName2}&quot;, 取运行目录 () + &quot;tem.vbs&quot;, , , )
    写到文件 (取运行目录 () + &quot;tem.vbs&quot;, 文本到字节集 (局_命令))
    文件_执行 (取运行目录 () + &quot;tem.vbs&quot;)
    进程_结束2 ()

}

方法 文件_执行 &lt;公开 静态 类型 = 逻辑型 注释 = &quot;执行文件夹或文件或命令&quot; 返回值注释 = &quot;成功返回真,失败返回假&quot; 折叠 折叠2 @输出名 = &quot;ShellExecFile&quot;
      @禁止流程检查 = 真&gt;
参数 参_文件名 &lt;类型 = 文本型 注释 = &quot;欲操作(文件)或(文件夹的名称)或(网址)&quot; @输出名 = &quot;filePath&quot;&gt;
参数 参_命令行 &lt;类型 = 文本型 注释 = &quot;执行文件的命令行,没有则设为空&quot; @默认值 = &quot;&quot; @输出名 = &quot;commandLine&quot;&gt;
参数 参_窗口方式 &lt;类型 = 整数 注释 = &quot;0、普通激活方式;1、隐藏窗口;2、最小化窗口、3、最大化窗口&quot; @输出名 = &quot;showCmd&quot; @默认值 = 0&gt;
{
    @   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&quot;open&quot;,                // 操作 (这里我们指定 &quot;open&quot;)
    @         filePath,            // 要执行的文件路径
    @         commandLine,         // 传递给应用程序的命令行参数 (可以是 NULL)
    @         NULL,                  // 默认目录 (NULL 表示使用当前目录)
    @         showCmd                // 窗口显示方式
    @   );
    @   // 检查 ShellExecuteW 是否成功执行
    @   if (result &lt;= (HINSTANCE)32) {
    @         // 如果返回值小于等于 32,则表示出错
    @         return false;
    @   }
    @   return true;

}
</code></pre>

addminlinux 发表于 2025-2-9 08:58:03

学习一下看看大老的办法
页: [1]
查看完整版本: 求大佬帮忙写个自动更新,并删除自身的例子。