|
正式会员享受无限制浏览网站功能和高速网盘下载,赶快加入本站吧!
您需要 登录 才可以下载或查看,没有账号?立即注册
x
VPatch 原为 NSIS 的一个插件,能够创建一个补丁文件用于安装时升级用户系统中的文件。包括两个工具:GenPat 工具能够生成补丁数据文件,VPatch 插件能够应用补丁数据文件来升级目标文件。使用补丁数据文件,你能降低你的软件的升级下载量,因为只有两个文件间不同的地方被包含在补丁数据文件中。
从 VPatch v3.0 开始,增加了用户图形界面 (GUI),并能创建可独立运行的 Exe 或 Dll 文件(分别使用「运行库」Vpatch.bin 和 VPatchDLL.bin)。
VPatch v3.2 又增加了两个命令行工具,其中 ListPat.exe 可列出一个补丁数据文件中的所有补丁数据的主要内容。vpatchprompt.exe 可作为补丁应用程序,也可当作「运行库」捆绑补丁数据后生成可独立运行的 Exe 文件(需人工干预)。
原版下载:
https://www.tibed.net/files/vpatch31.exe
http://www.tibed.net/files/vpatch32.exe
汉化
VPatch31 HH.exe
(963.74 KB, 下载次数: 0)
VPatch32 HH.exe
(87.53 KB, 下载次数: 0)
首先,将前面得到的 VPatch.exe 加入初始文件,下面的语句就看着办了:
- -- 在注册表内获得原版程序的安装目录,并写入变量 %AppFolder%
- InstallFolder = Registry.GetValue(HKEY_CURRENT_USER, "Software\\您的产品", "安装目录", false);
- SessionVar.Set("%AppFolder%", InstallFolder);
- -- 将 VPatch.exe 复制到安装目录
- File.Copy(SessionVar.Expand("%TempLaunchFolder%\\VPatch.exe"), SessionVar.Expand("%AppFolder%"), true, true, false, true, nil);
- -- 备份文件
- function BackupFile(filename)
- Folder.Create(SessionVar.Expand("%AppFolder%\\backup"));
- File.Copy(SessionVar.Expand("%AppFolder%\")..filename, SessionVar.Expand("%AppFolder%\\backup"), true, true, false, true, nil);
- File.Rename(SessionVar.Expand("%AppFolder%\")..filename, SessionVar.Expand("%AppFolder%\")..filename..".tmp");
- end
- -- 补丁失败时恢复文件
- function RestoreFile(filename)
- File.Copy(SessionVar.Expand("%AppFolder%\\backup\")..filename, SessionVar.Expand("%AppFolder%"), true, true, false, true, nil);
- File.Delete(SessionVar.Expand("%AppFolder%\\backup\")..filename, false, false, false, nil);
- File.Delete(SessionVar.Expand("%AppFolder%\")..filename..".tmp", false, false, false, nil);
- end
- -- 补丁成功后删除临时文件
- function DeleTempFile(filename)
- File.Delete(SessionVar.Expand("%AppFolder%\")..filename..".tmp", false, false, false, nil);
- end
- -- 补丁之前判断文件是否存在以及是否正在使用
- function FileExistInUse(filename)
- result1 = File.DoesExist(SessionVar.Expand("%AppFolder%\")..filename);
- result2 = not File.IsInUse(SessionVar.Expand("%AppFolder%\")..filename);
- local result = result1 and result2;
- return result;
- -- result:
- -- true = 文件存在且没有在使用
- -- false = 文件不存在或正在使用
- end
- -- 调用 VPatch.exe 进行补丁
- function PatchFile(filename)
- local oldver = filename..".tmp";
- result = File.Run("VPatch.exe", oldver.." "..filename, SessionVar.Expand("%AppFolder%"), SW_SHOWNORMAL, true);
- return result;
- -- result:
- -- 0 = 成功
- -- 非0 = 失败
- end
- -- 开始补丁
- if FileExistInUse("app.exe") then
- -- 开始补丁前备份文件
- BackupFile("app.exe");
- if PatchFile("app.exe") == 0 then
- Dialog.Message("成功", "补丁成功。", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
- DeleTempFile("app.exe");
- -- 进入下一个屏幕
- Screen.Next();
- else
- Dialog.Message("错误", "错误的文件或路径,请检查。", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
- RestoreFile("app.exe");
- end
- else
- Dialog.Message("错误", "文件不存在或正在使用。", MB_OK, MB_ICONSTOP, MB_DEFBUTTON1);
- end;
- -- 删除 VPatch.exe
- File.Delete(SessionVar.Expand("%AppFolder%\\VPatch.exe"), false, false, false, nil);
复制代码
添加了一个 FileExistInUse 函数,用来判断文件是否存在以及是否正在使用。
|
|