mal*_*to1 7 windows-installer wix
从控制面板和.msi本身卸载带有基于WiX的.msi的应用程序有什么区别吗?
如果有什么呢?
我问的原因如下:
不同之处如下:我的.msi将一些文件存储在%PROGRAMDATA%中.如果我从控制面板卸载那里的文件被卸载(似乎.msi跟踪那些(它们被定义为组件)),但当我打开我的.msi并尝试卸载(我有一个维护对话框)那些文件不会被删除.
另一个区别是:我还有一个自定义操作来停止我的应用程序,如果它正在运行,在InstallUeesecece中调用After ="AppSearch",在InstallExecuteSequence中调用Before ="CostFinalize",但是当从.msi中删除时它不是被召唤.只有一个对话框显示有文件要删除但正在使用但是有些进程,当我告诉它停止它们时它不会这样做.
Ste*_*mul 14
以下"讨论"有点失控.但我会把它留在这里作为研究静默模式和交互式模式安装之间经验差异的人的解释.
是的,简短的回答是,您确实可以看到不同的安装或卸载行为,具体取决于您调用(un)安装的方式.
这主要与MSI如何以不同的用户界面级别运行有关,这会导致MSI中的整个用户界面序列(InstallUISequence)完全运行或跳过(静默安装).跳过后,仅在InstallUISequence中定义的所有自定义操作都将无法运行.如果MSI设计得很好,这不是问题,因为用户界面自定义操作以立即模式运行,不应该对系统进行更改 - 他们应该只查询用户数据和设置,系统状态或帮助用户输入正确的数据用于安装.如果MSI设计不合理并且在用户界面中对系统进行了更改,则在无提示模式下运行时安装将不完整.这是一个严重的MSI设计错误,当你意识到所有大公司都默默地部署软件时,它就会变得更加严重.在进行公司应用程序重新打包时,我已多次看到此类错误.这不是对软件的信任投票,无论它有多好.奇怪和不可预测的问题必将浮出水面.
因此,InstallExecuteSequence(它是静默安装安装程序时唯一运行的)应具有所有必需的自定义操作,这些操作会在其中插入系统更改,以便正确设计MSI.如前所述,仅存在于用户界面序列中的自定义操作应处理从用户获取值和设置,而这些值应由命令行设置和定义,或者在转换中为静默安装定义.
自定义操作条件的某些奇怪和错误组合也可能导致在特殊情况下交互式安装和静默安装之间的差异.最后,在InstallExecuteSequence中将InstallFinalize之后的自定义操作置于静默运行时会导致操作失败.当然还有其他潜在的问题.
总之,如果您确实看到基于用户界面级别的安装行为的差异,则您的MSI包含严重的设计缺陷.您应该始终确保以交互方式使用等效结果静默运行MSI.正如已经说明的那样,大公司从未以交互方式运行安装,因为他们通过SCCM等软件管理系统推出软件.
有4个MSI UI级别,从完全静音到完全交互:
有一个MSI属性UILevel,其中包含GUI级别值2,3,4或5.如果您的自定义操作必须考虑用户界面类型,请检查此属性.对于完全静默的安装来说,这显然是最重要的,它永远不会显示任何对话框.
当您右键单击MSI并选择卸载时,您通常运行UILevel 3(具有进度条的基本UI).这意味着跳过InstallUISequence.
总之,错误可能只在其中一种模式(静默/非静默)中发生,因为MSI的用户界面序列及其针对某些用户界面级别的所有自定义操作都会被跳过.换句话说,如果MSI设计不当,产品可以在交互式安装时工作,而在静默安装时会失败(反之亦然).
还可以基于此UILevel功能以主要MSI安装顺序对自定义操作进行调节,以使结果因安装模式而异.我看到人们从主安装顺序中放置的自定义操作中的代码生成对话框(不允许交互),然后使用UILevel检查以静默安装模式禁止对话(或者他们也忘记了,触发隐藏模式对话框)在静默模式下运行时停止安装死机).这些奇怪的设计构造会根据触发和运行安装的方式导致意外的安装行为.
虽然这不是你问的答案,但所有这些的最终结论是,如果你的软件是针对大公司的,你不应该浪费你的设计工作在你的设置的高级GUI,因为它可能永远不会用于大规模部署方案.相反,您应该使用可以在命令行或通过转换设置的公共属性来参数化安装程序,以便可以轻松控制安装程序,而无需以交互方式运行它.请参阅此文章:如何更好地使用MSI文件.
由于我已经远远超出了您的问题,我还应该注意,一些用于服务器安装的高级安装程序可以(通过审核)从良好的GUI中受益,以帮助人们快速安装和测试您的服务器软件.这些安装程序倾向于使用诸如IIS,MS SQL,AD等非常高级的功能......并且对于知识渊博的系统管理员来说可能需要一些交互性.但正如俗话所说"大多数事情都可以默认",良好的默认设置通常更容易让人们安装和测试是否知识渊博.如今,许多大公司都运行大型服务器虚拟服务器场(每个用例一个虚拟服务器),因此即使是服务器安装也会自动进行大规模部署,然后一个好的参数化安装程序可以设置公共属性.较小的公司也可能拥有服务器虚拟化(使测试变得简单),但他们可能会以交互方式安装您的设置,接受任何默认设置 - 至少这是我的印象.