伙计们,
我们在安装 MSI 时遇到了一些排序问题。作为我们应用程序的一部分,我们安装了一系列服务,并允许用户选择是立即启动它们还是稍后启动它们。
当它们立即启动时,它们似乎在安装序列中启动得太早 - 在我们的数据库管理器有机会更新数据库之前。
现在,我们运行数据库更新程序的自定义操作看起来像这样——它在“InstallFinalize”之后运行——在这个过程中很晚。
<InstallExecuteSequence>
<RemoveExistingProducts After='InstallInitialize' />
<Custom Action='RunDbUpdateManagerAction' After='InstallFinalize'>
DbUpdateManager=3</Custom>
</InstallExecuteSequence>
为了确保在任何已安装的服务启动之前执行数据库脚本,在之后或之前运行更合适的步骤是什么?是否有“BeforeServiceStart”步骤?
编辑:
仅仅在标签上定义“Before='StartServices'”属性并不能解决我的问题。
我假设问题是这样的:自定义操作有一个“内部文本”,它代表一个条件,这个条件是:“&DbUpdateManager=3”。从我可以从试验和错误中推断出来,这可能意味着“必须发布 DbUpdateManager 功能”。
现在,问题是:“PublishFeature”出现在安装序列的最后,就在“InstallFinalize”之前,而且肯定在 InstallServices / StartServices 之后。因此,当我指定“Before=StartServices”要求时,“必须发布 DbUpdateManager 功能”条件还不成立,因此 DbUpdateManager 不会被执行:-(
我尝试删除条件 - 在这种情况下,我的 DbUpdateManager 有时根本不执行,有时不止一次 - 没有真正明确的模式来说明什么时候会发生......
还有什么想法吗??有没有一种方法可以检查“安装了 DbUpdateManager 功能”的条件,这在“InstallFiles”步骤之后是否正确?
马克