问题标签 [install-sequence]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2184 浏览

wix - MSI 安装顺序 - 在服务启动之前运行 DB 脚本

伙计们,

我们在安装 MSI 时遇到了一些排序问题。作为我们应用程序的一部分,我们安装了一系列服务,并允许用户选择是立即启动它们还是稍后启动它们。

当它们立即启动时,它们似乎在安装序列中启动得太早 - 在我们的数据库管理器有机会更新数据库之前。

现在,我们运行数据库更新程序的自定义操作看起来像这样——它在“InstallFinalize”之后运行——在这个过程中很晚。

为了确保在任何已安装的服务启动之前执行数据库脚本,在之后或之前运行更合适的步骤是什么?是否有“BeforeServiceStart”步骤?

编辑:

仅仅在标签上定义“Before='StartServices'”属性并不能解决我的问题。

我假设问题是这样的:自定义操作有一个“内部文本”,它代表一个条件,这个条件是:“&DbUpdateManager=3”。从我可以从试验和错误中推断出来,这可能意味着“必须发布 DbUpdateManager 功能”。

现在,问题是:“PublishFeature”出现在安装序列的最后,就在“InstallFinalize”之前,而且肯定在 InstallServices / StartServices 之后。因此,当我指定“Before=StartServices”要求时,“必须发布 DbUpdateManager 功能”条件还不成立,因此 DbUpdateManager 不会被执行:-(

我尝试删除条件 - 在这种情况下,我的 DbUpdateManager 有时根本不执行,有时不止一次 - 没有真正明确的模式来说明什么时候会发生......

还有什么想法吗??有没有一种方法可以检查“安装了 DbUpdateManager 功能”的条件,这在“InstallFiles”步骤之后是否正确?

马克

0 投票
4 回答
18925 浏览

wix - WiX - 试图找出安装顺序

我正在安装一个大型应用程序,其中一部分是一个名为“DbUpdateManager”的自定义编写工具,用于针对我们的目标数据库批量执行 SQL 脚本。

现在,WiX 2.x 安装工作正常——但它有一个缺陷:在安装过程中,我还安装了几个 Windows 服务,可以选择立即启动。但是,如果 DbUpdateManager 尚未运行,这些将失败。

所以我想要完成的是:

  1. 从我的 MSI 安装 DbUpdateManager 和我的服务
  2. 在任何服务启动之前运行 DbUpdateManager

我当前的 WiX 源代码如下所示:

我继承了这个 WIX,它可以工作 - 但正如我所说 - DbUpdateManager 在过程中被调用得太晚(只有“After = InstallFinalize”),因此服务一开始将无法正常启动(第二次运行正常在 DbUpdateManager 运行后手动重新启动它们时左右)。

我浏览了一下 MSI 文档,发现了一个名为“StartServices”的好步骤,所以我的直觉是将调用自定义操作更改为:

不幸的是,在这种情况下,什么都没有发生 - DbUpdateManager 永远不会被调用....

任何想法为什么?调试 MSI/WiX 的东西真的很棘手,而且我似乎再也见不到森林了......

谢谢!马克

编辑:“RunDbUpdateManagerAction”放置在我的 MSI 的 InstallExecuteSequence 表中的正确位置 - 就在 InstallServices 之后和 StartServices 之前 - 但它不起作用.... DbUpdateManager(一个 Winforms 实用程序)在期间显示安装 :-(

编辑 2:现在我的操作似乎在正确的时间执行了 - 不幸的是,我只是没有看到我的向导 :-( 我看到的是错误代码“返回值 1631”,这意味着类似于“MSI 服务”无法启动” - wtf ???

MSI (s) (2C:D8) [20:53:36:383]:执行操作:RunDbUpdateManagerAction 操作 20:53:36:RunDbUpdateManagerAction。操作于 20:53:36 开始:RunDbUpdateManagerAction。MSI (s) (2C:D8) [20:53:36:383]:执行操作:StartServices 操作 20:53:36:StartServices。服务正在启动 操作于 20:53:36 开始:StartServices。操作于 20:53:36 完成:RunDbUpdateManagerAction。返回值 1631。

0 投票
1 回答
543 浏览

wix - 如何将值从自定义对话框传递到组件

我创建了一个自定义对话框,允许用户配置我们正在安装的服务将运行的帐户。为此,我将属性事件附加到自定义对话框上的 Next 按钮,该按钮将设置[Account]属性:

然后我尝试在安装服务的组件中获取帐户属性:

我的问题是该组件不使用为[Account]发布的值,即使我可以看到安装程序日志中的属性事件正在发布正确的值。所以我的问题是如何确保服务安装程序组件获取我的自定义对话框发布的[Account]值?

0 投票
1 回答
250 浏览

c# - WIX:如果安装程序被取消,重新启动服务?

如果设置 MSI 被用户取消,是否可以重新启动服务?

MSI 必须重新启动服务有两种情况。

  1. 停止并更新旧服务文件,然后启动服务。如果服务无法启动,请更换旧文件并重新启动服务。[这部分是通过回滚完成的]
  2. 如果在设置过程中故意取消MSI,请重新启动服务。

我有一个解决方案,我可以调用CustomAction取消并使用 CMD.EXE 重新启动服务,但我不喜欢它。请建议任何其他解决方案,例如使用RestartResourceResourceManager

代码:

0 投票
1 回答
322 浏览

wix - 在 WIX 安装序列中动态更改 CA

我发现根据我在安装程序中设置的属性来决定我在安装的某些点调用哪些自定义操作非常有用。

例如; 如果我想使用单独的 DLL 来连接不同版本的 SQL(具体来说是 SSRS 2005/2008R2)。

假设识别我应该运行哪个 CA 的操作(通过找出安装程序指向的 SSRS 版本)以“立即”执行,并且可能执行或不执行的 CA 取决于此结果并被“延迟”

如何在安装期间动态更改在安装的某些部分执行的延迟 CA?.. 这甚至可能吗?

(((首选 WiX 2.0,但可以接受更高版本的答案))