Inno Setup:如何在"运行"部分或"运行"部分之前运行代码过程?

Kur*_*rai 3 inno-setup

我想在安装新数据库之前删除旧数据库,以便为用户更新它.

我有以下场景:

在我的Components部分中,我有一个用户选项:

[Components]
Name: "updateDatabase";  Description: "Update Database";  Types: custom; \
    Flags: checkablealone disablenouninstallwarning
Run Code Online (Sandbox Code Playgroud)

我在Code章节中有一个程序,如果用户选择此选项,则在运行部分中执行,然后再安装新程序.

[Code]
procedure RemoveOldDatabase();
begin
...
end;

[Run]
**--> Here I want to call RemoveOldDatabase if Components: updateDatabase is checked**
Filename: "database.exe"; StatusMsg: "Installing new database..."; Components: updateDatabase
Run Code Online (Sandbox Code Playgroud)

新数据库的安装工作正常.问题是我想在安装新的之前删除旧的,调用该过程RemoveOldDatabase.

是否可以只使用Inno Setup?

谢谢.

TLa*_*ama 6

在我看来,一种非常简单且仍然具有描述性的方法是将您的过程作为节条目的BeforeInstall参数函数执行[Run].一个BeforeInstall条目被处理之前的参数函数执行一次正确的(且仅当它的处理,而你的情况是在选择组件时).你会写这个:

[Run]
Filename: "database.exe"; Components: UpdateDatabase; BeforeInstall: RemoveOldDatabase

[Code]
procedure RemoveOldDatabase;
begin
  { ... }
end;
Run Code Online (Sandbox Code Playgroud)