gpt4 book ai didi

installation - 如何在 Inno Setup 中覆盖安装但不覆盖更改?

转载 作者:行者123 更新时间:2023-12-03 09:21:09 24 4
gpt4 key购买 nike

我知道如何使用此方法覆盖文件

[Files]
Source: "Project\*"; DestDir: "{app}"; \
Flags: ignoreversion recursesubdirs onlyifdoesntexist; Permissions: everyone-full

但是,当我使用“安装或更改程序”部分中的“更改”选项更改程序时,我不想覆盖这些文件。

我为我的安装程序创建更改选项,如下所示:

[setup]
AppModifyPath="{srcexe}" /modify=1

我该怎么做?

最佳答案

首先,您的代码似乎是错误的。随着onlyifdoesntexist flag ,这些文件永远不会被覆盖,与您声称的相反。因此,对于大多数目的,只需使用此标志即可。


无论如何,解决方案是创建两个 [Files] 条目,一个覆盖,另一个不覆盖。并使用 Pascal 脚本来选择相应安装模式的条目。

[Files]
Source: "Project\*"; DestDir: "{app}"; Flags: ... onlyifdoesntexist; Check: IsUpgrade
Source: "Project\*"; DestDir: "{app}"; Flags: ...; Check: not IsUpgrade

IsUpgrade 实现示例:

[Code]

function IsUpgrade: Boolean;
var
S: string;
InnoSetupReg: string;
AppPathName: string;
begin
InnoSetupReg :=
'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppId")}_is1';
{ The ExpandConstant is here for Inno Script Studio, }
{ which generated AppId in a form of GUID. }
{ The leading { of the GUID has to be doubled in Inno Setup, }
{ and the ExpandConstant collapses that back to single {. }
InnoSetupReg := ExpandConstant(InnoSetupReg);

AppPathName := 'Inno Setup: App Path';
Result :=
RegQueryStringValue(HKLM, InnoSetupReg, AppPathName, S) or
RegQueryStringValue(HKCU, InnoSetupReg, AppPathName, S);
end;

另请参阅Pascal scripting: Check parameters .

关于installation - 如何在 Inno Setup 中覆盖安装但不覆盖更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30566752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com