在提供无法启动的服务后继续Wix设置

时间:2018-01-11 12:11:55

标签: service wix windows-installer

我们有一个设置,我们有一个服务,我们尝试安装和运行。

由于某种原因,服务无法启动(由于端口已在使用中)。这对我们来说并不重要,不应该停止设置。

服务声明如下:

func NewHub() *Hub {
  return &Hub{
    ...
    clients:    make(map[*Client]bool),
    users:      make(map[int]*Client),
  }
}

当我们执行设置时,我们收到此错误: enter image description here

然后,我们只能选择重试(也会失败)或取消(停止设置)。

我们尝试了很多东西(只放了serviceInstall,而不是serviceControl,......)但是在某些时候我们总是有错误。

我们应该如何管理?

2 个答案:

答案 0 :(得分:1)

尝试答案(无法测试):

如果将ServiceControl元素的Wait attribute设置为“否”会怎样?我目前没有服务exe测试,但我相信这可以按照您的意愿运行。

出于可靠性的原因,通常应该避免自定义操作,但另一方面 - 如果您确实需要一些特殊的东西 - 这就是它们的用途。为大多数部署问题做好准备,但这些问题源于您的自定义操作: Why is it a good idea to limit the use of custom actions in my WiX / MSI setups?

一些进一步的建议(没有被要求:-)):

  1. 您不应该使用一个组件安装多个二进制文件。出于多种原因,您应该为每个组件使用一个文件。 Windows Installer最佳实践明确要求每个组件只有一个二进制文件,但在我看来,您应该每个文件使用一个组件来进行小的升级和修补,并且自我修复更可靠。
    • 为了更好地理解组件引用计数: Change my component GUID in wix?
    • 通过消除硬编码的GUID,您可以利用WiX的高级自动GUID创建概念。如果绝对安装路径发生更改,这将更改组件GUID。这是组件引用计数的正确行为。自动魔法。你要么设置Guid =“*”,要么完全省略Guid属性。一些安装位置需要硬编码GUID - WiX编译器会发出警告并解释原因。
  2. 如果您确实更改了组件结构(每个组件使用一个文件),您应该将安装路径更改为“断开过去犯罪的链接”组件引用计数。这是一个非常复杂的主题,但是更改安装路径会为您排序所有问题 - 如果您还启用了我在上一点中提到的自动组件GUID。从那时起保持路径稳定(直到你有一个主要的新版本)。
    • 您可以像将应用程序的主要(和次要?)版本的子文件夹添加到主安装文件夹层次结构一样简单:"Program Files\MyCompany\MySoftware\5"而不是"Program Files\MyCompany\MySoftware"
    • 我只会将主要版本添加到路径中,并在整个应用程序的生命周期内保持安装路径稳定,然后在您想要断开与以前安装程序的链接以获取主要新软件版本时增加(例如,如果您要安装两个版本并排 - 您的应用程序必须构建为正确处理,即不从两个版本等覆盖注册表中的共享设置......)。
  3. 您可能只想通过指定非标准属性的值(否则依赖于默认值)来考虑简化您的WiX源文件。这可以大大简化您的WiX源文件。以下是一个示例: Syntax for guids in WIX?
  4. 只需内联快速示例(与上面的链接相同 - 检查出来),这就是安装具有默认属性/参数的普通文件所需的全部 - 所有其他属性默认都很好 - 除非你想覆盖一些东西:

    <Component>
      <File Source="..\File.dll" />
    </Component>
    

    一些链接:

答案 1 :(得分:0)

删除ServiceControl元素代替CustomAction元素并设置@DllEntry="WixQuietExec",然后使用标准方法启动服务net start foo并忽略结果。有关详细信息,请参阅Quiet Execution Custom Action