在Installshield中,用于仅在安装时启动应用程序而不是卸载或修复的最佳事件是什么?

时间:2008-09-24 23:23:32

标签: firebird installshield

我们最近从推出自己的安装回到InstallShield 2008。所以,我仍然试图在它上面学习。

我们正在使用Firebird和USB驱动程序,我们找不到好的msi安装解决方案。所以,我们有一个cmd行来静默安装firebird,usb驱动程序主要是静默安装。

我们已将此代码放入事件处理程序DefaultFeatureInstalled中。这在第一次安装时非常有效。但是,当我进行卸载时,它会尝试再次启动firebird安装程序,因此它必须再次发送DefaultFeatureInstalled事件。

他们的另一个事件是否可以使用,或者有没有办法在DefaultFeatureInstalled事件中检测它是安装还是卸载?

5 个答案:

答案 0 :(得分:1)

Chris,我无法让MsiGetProperty工作。只需添加您拥有的代码

string sRemove;
number nBuffer;

nBuffer = 256;
if (MsiGetProperty(ISMSI_HANDLE, "REMOVE", sRemove, nBuffer) = ERROR_SUCCESS) then
     //do something
endif;

我得到“未定义的标识符”。我尝试了几件事让IS认识到它没有成功。经过一番讨论,我意识到IS首先没有调用卸载功能。我有另一个功能,onEnd我认为这是相同的事情。清理完之后,我得到了我在开始时预期的结果。

因此,正确的答案是您不必为DefaultFeature_Installed事件中的代码执行任何操作,而不是在卸载时调用。

答案 1 :(得分:0)

您可以查看MSI属性,告诉您是否已安装产品或是否正在进行卸载。如果产品已经存在,则Installed属性为true,因此您可以在布尔表达式中使用它(例如:未安装)。如果正在进行卸载,REMOVE属性将设置为“ALL”。您可以在这些属性上调整Firebird安装逻辑,您可以使用MsiGetProperty函数检索这些属性。

注意:属性名称根据大小写表示不同的内容,因此请确保使用上述情况。

我在IS在线帮助或Google中找不到任何有关DefaultFeatureInstalled事件的引用。您的InstallShield项目是基本MSI还是InstallScript?

答案 2 :(得分:0)

我正在做一个InstallScript项目。

我仔细检查了事件,我正在使用的函数是DefaultFeature_Installed,带有下划线。我搜索了网络和IS的网站,并发现了它的提及,但没有定义。我向开发人员询问了最初将代码移动到此事件的开发人员,并且她不记得她将代码移动到此事件的位置或原因。

今天早上我会调查MsiGetProperty。谢谢你的指针。

答案 3 :(得分:0)

您可以将此代码添加到DefaultFeature_Installed事件:

string sRemove;
number nBuffer;

nBuffer = 256;
if (MsiGetProperty(ISMSI_HANDLE, "REMOVE", sRemove, nBuffer) = ERROR_SUCCESS) then
     //do something
endif;

注意:函数名称区分大小写。 ISMSI_HANDLE值是InstallShield安装引擎的句柄。如果sRemove等于“ALL”,表示正在进行卸载,则可以跳过Firebird安装。

答案 4 :(得分:0)

如果您使用的是InstallScript或InstallScript MSI项目,则需要处理OnFirstUIBefore事件。它是第一次运行安装程序时调用的。再次启动安装程序时,会在其位置引发OnMaintUIBefore事件。