批处理自己更新自己
class procedure TVTUpgrader.UpdateSelf(const FileName: TVTString);
var
LBatchFile: TextFile;
LBatchFileName: TVTString;
LProcessInfo: TProcessInformation;
LStartUpInfo: TStartupInfo;
begin
//批处理文件名
LBatchFileName := ExtractFilePath(ParamStr(0)) + '_deleteme.bat';
//打开文件,设置覆盖模式
AssignFile(LBatchFile, LBatchFileName);
Rewrite(LBatchFile);
//写入批处理内容
Writeln(LBatchFile, ':try');
Writeln(LBatchFile, 'del "' + ParamStr(0) + '"');
Writeln(LBatchFile, 'if exist "' + ParamStr(0) + '"' + ' goto try');
Writeln(LBatchFile, 'copy "' + FileName + '" "' + ParamStr(0) + '"');
Writeln(LBatchFile, 'del "' + FileName + '"');
Writeln(LBatchFile, 'del %0');
//关闭文件
CloseFile(LBatchFile);
//创建新进程运行批处理文件
FillChar(LStartUpInfo, SizeOf(LStartUpInfo), $00);
LStartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
LStartUpInfo.wShowWindow := SW_HIDE;
if CreateProcess(nil, PChar(LBatchFileName), nil, nil, False,
IDLE_PRIORITY_CLASS, nil, nil, LStartUpInfo, LProcessInfo) then
begin
CloseHandle(LProcessInfo.hThread);
CloseHandle(LProcessInfo.hProcess);
end;
end;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现