windows Inno Setup - 检查目标中是否存在文件,否则不会中止安装

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/12951327/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-09 09:59:47  来源:igfitidea点击:

Inno Setup - Check if file exist in destination or else if doesn't abort the installation

windowsinstallerinno-setup

提问by Dielo

I need my installer to check if a file exists in the destination location, and if is not there, then the installation aborts. My project is a update patch, so I want the installer to avoid installing the update files if the main exe of the application is not in the destination. How can I do this?

我需要我的安装程序检查目标位置中是否存在文件,如果不存在,则安装中止。我的项目是一个更新补丁,所以如果应用程序的主 exe 不在目标中,我希望安装程序避免安装更新文件。我怎样才能做到这一点?

Can someone give an example of code to check file version through the Windows registry?

有人可以举一个通过 Windows 注册表检查文件版本的代码示例吗?

[Files]
Source C:\filename.exe; DestDir {app}; Flags: ignoreversion; BeforeInstall: CheckForFile;

[code]

procedure CheckForFile(): Boolean;
begin
  if (FileExists('c:\somefile.exe')) then
  begin
    MsgBox('File exists, install continues', mbInformation, MB_OK);
    Result := True;
  end
  else
  begin
    MsgBox('File does not exist, install stops', mbCriticalError, MB_OK);
    Result := False;
  end;
end;

回答by Miral

Just don't let the user proceed until they pick the correct folder.

只是不要让用户继续,直到他们选择正确的文件夹。

function NextButtonClick(PageId: Integer): Boolean;
begin
    Result := True;
    if (PageId = wpSelectDir) and not FileExists(ExpandConstant('{app}\yourapp.exe')) then begin
        MsgBox('YourApp does not seem to be installed in that folder.  Please select the correct folder.', mbError, MB_OK);
        Result := False;
        exit;
    end;
end;

Of course, it's also a good idea to try to automatically pick the correct folder for them, eg. by retrieving the correct location out of the registry.

当然,尝试自动为他们选择正确的文件夹也是一个好主意,例如。通过从注册表中检索正确的位置。

回答by Tanckom

Another solution would be the InitializeSetup():

另一个解决方案是InitializeSetup()

Credit: Manfred

信用:曼弗雷德

[code]
   function InitializeSetup(): Boolean;
   begin
     if (FileExists(ExpandConstant('{pf}\{#MyAppName}\somefile.exe'))) then
     begin
       MsgBox('Installation validated', mbInformation, MB_OK);
       Result := True;
     end
     else
     begin
       MsgBox('Abort installation', mbCriticalError, MB_OK);
       Result := False;
     end;
   end;