Inno Setup:检查32位System32(Sysnative)文件夹中是否存在文件

时间:2018-03-26 22:20:24

标签: inno-setup pascalscript

我在名为System32\Drivers的{​​{1}}文件夹中有一个sys文件(自定义sys文件)。我的应用程序仅限32位兼容,因此我的安装程序以32位模式运行。我的脚本需要查找这个sys文件是否存在。

我使用了下面帖子中解释的gpiotom.sys函数,但它不起作用,因为它仅适用于64位应用程序:

InnoSetup (Pascal): FileExists() doesn't find every file

如果我的sys文件在32位模式下是否存在,我能找到任何方法吗?

以下是Pascal脚本语言的代码片段:

FileExists

1 个答案:

答案 0 :(得分:1)

通常,我认为在64位模式下运行32位应用程序的安装程序没有任何问题。只需确保在必要时使用32位路径,例如:

[Setup]
DefaultDirName={pf32}\My Program

无论如何,如果你想坚持使用32位模式,你可以使用EnableFsRedirection functiondisable WOW64 file system redirection

使用此功能,您可以实现FileExists的替换:

function System32FileExists(FileName: string): Boolean;
var
  OldState: Boolean;
begin
  if IsWin64 then
  begin
    Log('64-bit system');
    OldState := EnableFsRedirection(False);
    if OldState then Log('Disabled WOW64 file system redirection');
    try
      Result := FileExists(FileName);
    finally
      EnableFsRedirection(OldState);
      if OldState then Log('Resumed WOW64 file system redirection');
    end;
  end
    else
  begin
    Log('32-bit system');
    Result := FileExists(FileName);
  end;

  if Result then
    Log(Format('File %s exists', [FileName]))
  else
    Log(Format('File %s does not exists', [FileName]));
end;