批處理自己更新自己

來源:互聯網
上載者:User

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;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.