加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

inno-setup – 在另一个进程中打开文件时,Inno Setup LoadString

发布时间:2020-12-15 10:04:37 所属栏目:大数据 来源:网络整理
导读:要检查数据库(SQL Anywhere)何时被激发并准备好接收请求,我将数据库消息窗口输出到日志(文本)文件,然后尝试使用LoadStringFromFile读取它,然后我使用LoadStringFromFile搜索特定文本波什.问题是,当文件正在使用时,这会失败(我假设). Exec(strInstallPath + '
要检查数据库(SQL Anywhere)何时被激发并准备好接收请求,我将数据库消息窗口输出到日志(文本)文件,然后尝试使用LoadStringFromFile读取它,然后我使用LoadStringFromFile搜索特定文本波什.问题是,当文件正在使用时,这会失败(我假设).
Exec(strInstallPath + 'Bin32dbeng17.exe','-n ' + strEngineName + ' "' + strInstallPath + 'DatabaseOlympus.db" -n ' + strDatabaseName + ' -gdall -xtcpip -ti0 -c25p -ot "' + strTempPath + 'dbeng.log"','',SW_HIDE,ewNoWait,intResultCode);
  if not LoadStringFromFile(strTempPath + 'dbeng.log',astrDatabaseEngineLog) then
    begin
      Log('Loading string from file failed.');
    end;

我还尝试使用FileCopy复制日志文件并尝试从文件的副本读取,但FileCopy也失败.

if not FileCopy(strTempPath + 'dbeng.log',strTempPath + 'dbengcopy.log',False) then
    begin
      Log('File copy failed.');
    end;

有没有办法从正在使用的文件或其他方式读取?

解决方法

使用TFileStream.Create(FileName,fmOpenRead或fmShareDenyNone).

在Inno Setup的Unicode版本中,由于类的接口不良,它的使用很棘手.

function BufferToAnsi(const Buffer: string): AnsiString;
var
  W: Word;
  I: Integer;
begin
  SetLength(Result,Length(Buffer) * 2);
  for I := 1 to Length(Buffer) do
  begin
    W := Ord(Buffer[I]);
    Result[(I * 2)] := Chr(W shr 8); { high byte }
    Result[(I * 2) - 1] := Chr(Byte(W)); { low byte }
  end;
end;

function LoadStringFromLockedFile(const FileName: string; var S: AnsiString): Boolean;
var
  Buffer: string;
  Stream: TFileStream;
begin
  Result := True;
  try
    Stream := TFileStream.Create(FileName,fmOpenRead or fmShareDenyNone);
    try
      SetLength(Buffer,Stream.Size div 2);
      Stream.ReadBuffer(Buffer,Stream.Size);
      S := BufferToAnsi(Buffer);
    finally
      Stream.Free;
    end;
  except
    Result := False;
  end;
end;

该代码基于TLama’s code发布于TLama’s code.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读