问题
SCENARIO
I have created an installer that will installs a Malware application for educative purposes, the installer contains these two tasks:
[Tasks]
Name: hidden; Description: Hidden mode; GroupDescription: Installation Mode
Name: visible; Description: Visible mode; GroupDescription: Installation Mode
This means, performs a hidden installation for the user (hidden dirs and files and make uninstallabe the installer), or a visible installation (normal dirs and files and Uninstallable=True).
PROBLEM
I've set the Uninstallable=True
by default, but If the user selects the hidden
task then I would like to avoid the uninstaller creation.
How I could do it properly?
回答1:
You can use the code shown in the Uninstallable directive documentation:
[Setup]
...
Uninstallable=not IsTaskSelected('hidden')
[Tasks]
Name: hidden; Description: Hidden mode; GroupDescription: Installation Mode
Name: visible; Description: Visible mode; GroupDescription: Installation Mode
Optionally, if you'd need more complex statements written in reusable function, or access some of the scripting code elements, you could write a function, e.g.:
[Setup]
...
Uninstallable=IsUninstallable
[Tasks]
Name: hidden; Description: Hidden mode; GroupDescription: Installation Mode
Name: visible; Description: Visible mode; GroupDescription: Installation Mode
[Code]
function IsUninstallable: Boolean;
begin
Result := WizardSilent or not IsTaskSelected('hidden');
end;
来源:https://stackoverflow.com/questions/27981658/innosetup-change-the-uninstallable-property-behavior-at-runtime