Windows installer 我需要检查什么以确保卸载正在运行?

Windows installer 我需要检查什么以确保卸载正在运行?,windows-installer,uninstallation,wise,launch-condition,Windows Installer,Uninstallation,Wise,Launch Condition,我需要在安装程序中设置启动条件,以防止用户直接运行MSI文件,除非他们正在运行卸载。(所有其他类型的安装都应该从bootstrap应用程序运行,以便它可以确保满足所有先决条件。) 我需要检查哪些条件?我尝试了REMOVE=“ALL”或BOOTSTRAP(BOOTSTRAP是我的BOOTSTRAP应用程序在启动MSI时在命令行上定义的一个属性),但这也会在修复安装时触发,我不想这样做。就我个人而言,我的做法不同。我希望用户可能运行MSI而不是SETUP.EXE,因此我故意使用AppSearch和L

我需要在安装程序中设置启动条件,以防止用户直接运行MSI文件,除非他们正在运行卸载。(所有其他类型的安装都应该从bootstrap应用程序运行,以便它可以确保满足所有先决条件。)


我需要检查哪些条件?我尝试了
REMOVE=“ALL”或BOOTSTRAP
BOOTSTRAP
是我的BOOTSTRAP应用程序在启动MSI时在命令行上定义的一个属性),但这也会在修复安装时触发,我不想这样做。

就我个人而言,我的做法不同。我希望用户可能运行MSI而不是SETUP.EXE,因此我故意使用AppSearch和LaunchConditions在MSI中复制所有引导程序prereq检查。这样,如果他们跳过引导程序或者它以某种方式失败,我的MSI仍然可以捕获问题


我还遵循在我的条件中附加“或已安装”的做法,以便丢失的prereq不会妨碍卸载。

我个人的做法与此不同。我希望用户可能运行MSI而不是SETUP.EXE,因此我故意使用AppSearch和LaunchConditions在MSI中复制所有引导程序prereq检查。这样,如果他们跳过引导程序或者它以某种方式失败,我的MSI仍然可以捕获问题



我还遵循在我的条件中附加“或已安装”的做法,以便丢失的prereq不会妨碍卸载。

据我所知,到目前为止,似乎没有办法阻止在直接启动MSI时运行修复安装,因此我必须在启动条件中添加
或重新安装=“ALL”
。如果有人知道一种只允许通过引导程序进行修复的方法,请给出解释。

据我所知,到目前为止,似乎还没有一种方法可以阻止直接启动MSI时运行修复安装,因此我必须在启动条件中添加
或重新安装
。如果有人知道一种只允许通过引导程序进行修复的方法,请给出解释。

您是否尝试过
MaintenanceMode=“Remove”
?当启动MSI以从控制面板(或直接)进行删除安装时,这不起作用。您尝试过
MaintenanceMode=“Remove”吗
?当启动MSI以从控制面板(或直接)进行删除安装时,这不起作用。对于简单的安装程序来说,这很好。然而,我的更为复杂。它安装一套程序,引导程序不仅要确保安装了prereq,还必须收集所有信息,例如用户想要安装什么(以便引导程序可以确定需要哪些prereq)以及要安装什么的各种配置信息。除了卸载,我的安装程序必须经过引导程序。我发现它也适用于非常复杂的安装程序。我的典型引导程序中有几十个COTS\GOTS包,加起来高达几GB。我在一个可重用的基线上支持多个产品,大约100个包(25GB)可以包含在一个产品中。在我的情况下,套件中的每个产品都有一组不同的prereq,我们不希望安装任何不需要的preq。由于一个安装程序无法启动另一个安装程序,所以从用户那里获取所有信息的任务和GUI就落在了引导程序的肩上。使用InstallShield,它们具有设置预请求和功能预请求的概念。功能预请求与安装程序中的某个功能关联,并且仅在安装该功能时才会安装。基本上,UI序列交还给setup.exe,setup.exe执行正常的东西的执行序列。另一种方法是不使用LaunchConditions。我已经创建了一个名为CustomFeatureConstraints的东西,它会一直等到选择了这些特性之后才执行所需的prereq。像.NET这样的东西总是需要的,但只有在安装功能WS时才需要IIS。对于一个简单的安装程序来说,这很好。然而,我的更为复杂。它安装一套程序,引导程序不仅要确保安装了prereq,还必须收集所有信息,例如用户想要安装什么(以便引导程序可以确定需要哪些prereq)以及要安装什么的各种配置信息。除了卸载,我的安装程序必须经过引导程序。我发现它也适用于非常复杂的安装程序。我的典型引导程序中有几十个COTS\GOTS包,加起来高达几GB。我在一个可重用的基线上支持多个产品,大约100个包(25GB)可以包含在一个产品中。在我的情况下,套件中的每个产品都有一组不同的prereq,我们不希望安装任何不需要的preq。由于一个安装程序无法启动另一个安装程序,所以从用户那里获取所有信息的任务和GUI就落在了引导程序的肩上。使用InstallShield,它们具有设置预请求和功能预请求的概念。功能预请求与安装程序中的某个功能关联,并且仅在安装该功能时才会安装。基本上,UI序列交还给setup.exe,setup.exe执行正常的东西的执行序列。另一种方法是不使用LaunchConditions。我已经创建了一个名为CustomFeatureConstraints的东西,它会一直等到选择了这些特性之后才执行所需的prereq。像.NET这样的东西总是需要的,但只有在安装功能WS的情况下才需要IIS。这将是公认的答案,除非出现实际可行的情况