Inno setup 验证是否已安装,如果已安装,则忽略某些文件

Inno setup 验证是否已安装,如果已安装,则忽略某些文件,inno-setup,Inno Setup,只有在对已安装的应用程序进行更新时,我才需要忽略一些文件(“.sdf”和“.config”) 我以递归方式获取文件: [Files] Source: "..\..\bin\Release\MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "..\..\bin\Release\*"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs; P

只有在对已安装的应用程序进行更新时,我才需要忽略一些文件(“.sdf”和“.config”)

我以递归方式获取文件:

[Files]
Source: "..\..\bin\Release\MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\..\bin\Release\*"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs; Permissions: everyone-full; Excludes: "*.key, *.udb, *.~db, *.crt"
有什么办法吗

提前谢谢

答案1

仅使用onlyfdestfileexistsonlyfdoesntextist

如果文件不存在(onlyfdoesntextist),请在第一次安装时复制所有需要的文件

如果文件存在(onlyfdestfileexists),则加载项将排除您不想更新的扩展名

Source: "..\..\bin\Release\MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\..\bin\Release\*"; DestDir: "{app}"; Flags: ignoreversion onlyifdoesntexist recursesubdirs createallsubdirs; Permissions: everyone-full; Excludes: "*.key, *.udb, *.~db, *.crt"
Source: "..\..\bin\Release\*"; DestDir: "{app}"; Flags: ignoreversion onlyifdestfileexists recursesubdirs createallsubdirs; Excludes: "*.key, *.udb, *.~db, *.crt, *.sdf, *.config"
答案2(未完全测试)

使用函数验证应用程序文件夹是否存在

[Files]
Source: "..\..\bin\Release\MyApp.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\..\bin\Release\*"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs; Permissions: everyone-full; Excludes: "*.key, *.udb, *.~db, *.crt";  Check: not IsInstalled
Source: "..\..\bin\Release\*"; DestDir: "{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs; Permissions: everyone-full; Excludes: "*.key, *.udb, *.~db, *.crt, *.sdf, *.config";  Check: IsInstalled

[code]
function IsInstalled: Boolean;
begin
  if DirExists(ExpandConstant('{app}\')) then 
  begin
    Result := True;
  end else
    Result := False;
end;

在条目中添加Check参数,并确保Check函数在update情况下返回false。下面是可以参考的例子

[档案] 资料来源:“MYPROG.EXE”;DestDir:“{app}”;支票:MyProgCheck


您可以编写一个
Check
函数并使用
not
操作符,如
Check:not-IsInstalled
。您可以简单地返回
Result:=DirExists(ExpandConstant({app}\)。但无论如何,检查文件夹并不是检测产品是否已安装的可靠方法。考虑一下,如果用户意外创建了与“代码”> {APP}同名的文件夹,会发生什么情况。或者,如果他们在目录选择页面中选择了一个现有的文件夹会怎么样。最好检查卸载注册表设置(或编写自己的设置)。例如,这里有一个小函数。