2014-10-08 306 views
3

我想在安装新数据库之前删除旧数据库,以便为用户更新。Inno Setup:如何在Run部分或Run部分之前运行代码过程?

我有以下情形:

在我Components节我为用户提供一个选项:

[Components] 
Name: "updateDatabase"; Description: "Update Database"; Types: custom; \ 
    Flags: checkablealone disablenouninstallwarning 

而且我在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 

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

只有使用Inno Setup才有可能吗?

谢谢。

+0

如果你要删除文件或目录,使用'[InstallDelete]'部分而不是过程。它将执行删除选择作为安装过程中的第一件事。 – TLama 2014-10-08 13:19:46

+0

问题是我必须删除多个directorys文件。我必须删除旧的数据库程序本身,调用Windows命令。举例来说,如果我在NextButtonClick过程中调用它,那么我的代码部分工作正常,但我有点迷路,不知道如何在运行部分之前调用它。 – KurayamiArai 2014-10-08 13:25:28

回答

5

在我看来,一种非常简单并且仍然具有描述性的方法是执行您的程序,作为[Run]节条目的BeforeInstall参数功能。一个BeforeInstall参数函数在处理条目之前执行一次(并且只有在处理了它的情况下(在您选择该组件的情况下)。你会这么写:

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

[Code] 
procedure RemoveOldDatabase; 
begin 
    { ... } 
end; 
+0

谢谢。我知道BeforeInstall参数,但不是我可以在那里调用一个过程。谢谢。 – KurayamiArai 2014-10-08 15:25:51

+0

不客气!那么,这些参数就是为了这个目的而存在的。 – TLama 2014-10-08 16:18:05

相关问题