Installation Inno安装:如何在安装时覆盖,而不是在更改时覆盖?

Installation Inno安装:如何在安装时覆盖,而不是在更改时覆盖?,installation,inno-setup,Installation,Inno Setup,我知道如何使用此方法覆盖文件 [Files] Source: "Project\*"; DestDir: "{app}"; \ Flags: ignoreversion recursesubdirs onlyifdoesntexist; Permissions: everyone-full 但是,当我使用“安装或更改程序”部分中的更改选项更改程序时,我不想覆盖文件 我为我的安装程序创建如下更改选项: [setup] AppModifyPath=&

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

[Files]
Source: "Project\*"; DestDir: "{app}"; \
    Flags: ignoreversion recursesubdirs onlyifdoesntexist; Permissions: everyone-full
但是,当我使用“安装或更改程序”部分中的更改选项更改程序时,我不想覆盖文件

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

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

如何执行此操作?

首先,您的代码似乎有误。与您声称的相反,使用
onlyifdoesntexist
标志,文件永远不会被覆盖


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

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

[代码]
函数为:布尔型;
变量
S:字符串;
InnoSetupReg:字符串;
AppPathName:字符串;
开始
InnoSetupReg:=
'Software\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting(“AppId”)}\u is1';
{ExpandConstant在这里用于Inno Script Studio,}
{它以GUID的形式生成了AppId。}
{在Inno设置中,GUID的前导{必须加倍,}
{ExpandConstant将其折叠回单个{}
InnoSetupReg:=ExpandConstant(InnoSetupReg);
AppPathName:=“Inno安装程序:应用程序路径”;
结果:=
RegQueryStringValue(HKLM、InnoSetupReg、AppPathName、S)或
RegQueryStringValue(HKCU、InnoSetupReg、AppPathName、S);
结束;
另见