• 解决自动更新因为EXE文件正在运行而失败的问题


    function IsFileInUse(FName:string):Boolean;  
    var  
      HFileRes:HFILE;  
    begin
      Result:=False;
      if not FileExists(FName) then
        Exit;
      HFileRes:=CreateFile(PChar(FName),GENERIC_READ or GENERIC_WRITE,0,
        nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
      Result:=(HFileRes=INVALID_HANDLE_VALUE);
      if not Result then
        CloseHandle(HFileRes);
    end;

    function KillTask(ExeFileName: string): Integer;
    const
      PROCESS_TERMINATE = $0001;
    var
      ContinueLoop: boolean;
      FSnapshotHandle: THandle;
      FProcessEntry32: TProcessEntry32;
    begin
      Result := 0;
      FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
      ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

      while Integer(ContinueLoop) <> 0 do
      begin
      if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
      UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
      UpperCase(ExeFileName))) then
      Result := Integer(TerminateProcess(
      OpenProcess(PROCESS_TERMINATE,
      BOOL(0),
      FProcessEntry32.th32ProcessID),
      0));
      ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
      end;
      CloseHandle(FSnapshotHandle);
    end;

    procedure CloseMainProcess(fileName: string);
    begin
      if (ExtractFileExt(fileName)='.exe') or
        (ExtractFileExt(fileName)='.com') then
      begin
        if IsFileInUse(fileName) then
        begin
          KillTask(fileName);
        end; 
      end; 
    end;

  • 相关阅读:
    Vue路由跳转时修改页面标题
    Vue整合Quill富文本编辑器
    XML中的转义字符
    整合SSM框架环境搭建
    Android搞定权限申请
    Android实现秒开效果
    tail -f 与tail -F的区别
    druid 启动报错
    sqoop flume学习笔记
    20180911
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940975.html
Copyright © 2020-2023  润新知