【问题标题】:how to configure installed windows service startup type to automatic during installation using InstallShield如何在安装期间使用 InstallShield 将已安装的 Windows 服务启动类型配置为自动
【发布时间】:2018-04-23 03:42:08
【问题描述】:

我是 InstallShield 的新手。我正在尝试为我的项目创建一个安装程序,我必须在其中安装 Wildfly 11 作为服务。 Wildfly 11 有一个文件 service.bat 非常适合我的需要。我面临一些需要帮助的问题。

1) 当我尝试通过选择 System Configuration->Service 在 InstallShield 中创建服务时,它表示要在组件中添加与服务相关的文件并将我想要运行的文件作为密钥文件。这里的问题是我要运行的密钥文件是 .bat 文件,服务无法识别它,因为它需要一个 .exe 文件才能运行。

2) 我如何设法创建一个自定义操作,该操作运行我的 .bat 文件来启动服务,并且工作正常。现在InstallShield中有没有办法可以将服务启动类型更改为自动?

即使我解决了我的第一个问题,我仍然在这里提到它,因为我想知道这是理想的做法还是我太天真以至于不知道理想的方法。

为了您的信息,我正在使用 InstallShiled 2014 Premier 版本,并且我正在使用 BasicMSI 项目类型。

提前感谢您的帮助。

【问题讨论】:

    标签: windows-installer installshield


    【解决方案1】:

    我不熟悉将 bat 文件作为服务运行。如果您尝试以正确的方式在 MSI 中进行设置,那么您在系统配置->服务下的正确位置。您的 bat 文件应通过组件安装。创建组件时,请务必将 bat 文件设置为您的密钥名称。配置完成后,您应该能够设置开始类型。

    我不建议使用自定义操作执行此操作,因为您必须考虑升级和卸载。我的猜测是你还没有考虑这个。

    如果您想在自定义操作中继续执行此操作,您应该使用命令行 sc.exe 命令或其相应的 API,无论您使用哪种语言编写自定义操作。在您的自定义操作中添加用于更改开始类型的代码。

    【讨论】:

    • 我试过你说的大卫。我的服务已安装,但当我尝试启动服务时,我收到错误 1053。我为整个 Wildfly 服务器文件夹创建了一个包含动态链接文件的组件,并排除了我想要作为密钥文件制作的 .bat 文件。再创建一个组件并添加 .bat 文件并将其设为密钥文件。然后使用具有 .bat 文件的组件创建服务。但是当我尝试启动服务时出现错误。我在这里想念什么。任何帮助都会很棒。
    • 类似地,当蝙蝠也以任何方式运行时,我如何将参数传递给这个蝙蝠。
    • 我会进一步调查您的服务失败的原因。安装服务的“最佳实践”方式是使用 MSI 中的 Service* 表。如果您键入“sc /?”从命令行它应该给你一个选项列表。我真的不熟悉将 bat 文件作为服务运行。这对我来说似乎很奇怪。我会认真远离在 InstallShield 中使用动态文件链接。如果您对此进行谷歌搜索,您会发现它在升级和关键文件方面存在严重问题。如果您只是花时间为每个文件创建一个组件,您将节省大量时间和头痛。
    【解决方案2】:

    服务安装:批处理文件不作为服务运行 (normally),但在某些情况下,它们用于安装 EXE 格式的服务文件。通常这是由开发人员在开发过程中完成的,或者在有限数量的计算机上手动安装服务。有些人还使用scheduled tasks 在系统启动时运行诸如这些的批处理文件。不是我推荐的方法。

    对于更大规模的分发,您可以使用适当的包进行部署。 MSI 就是这样一种格式。当您使用 MSI 时,您不应该使用批处理文件安装服务。相反,您应该通过适当的 MSI 表注册和配置服务,以利用内置的服务配置功能。本质上,您编写 ServiceInstallInstallControl 表来分别安装和控制相关服务。

    使用这种内置方法比使用自定义操作更可靠。关于为什么只应在需要时使用自定义操作的一些上下文:Why is it a good idea to limit the use of custom actions in my WiX / MSI setups?

    使用适当的 MSI 功能进行服务配置和控制,您将有更轻松的时间升级和维护您的软件包。


    Installshield 程序

    服务安装批处理文件通常看起来很吓人,但是当您分析它们时,它们实际上可能并没有多大作用。在某些情况下,其中很大一部分与解析命令行和处理错误条件有关。

    通常可以从这些脚本中提取所需的信息 - 它倾向于以查找服务是否有任何登录凭据为中心,并在 MSI 中复制批处理文件复制的所有文件的安装- 所以 MSI 完全取代了 BAT 文件作为部署解决方案。

    • 在编辑器中打开批处理文件并找到它安装的 EXE 文件。
    • 此 EXE 文件将是真正的 Windows 服务文件。可能有多个版本,例如 32 位和 64 位版本。
    • 将适当的 EXE 文件添加到您的 MSI 文件/Installshield 项目中。
    • 添加服务运行所需的任何支持文件。如果发现问题,您可以使用依赖遍历器和进程监视器对此进行分析。
    • 我没有最新版本的 Installshield 可供测试。在旧版本中,您打开组件视图并找到其中包含服务的组件。您打开它并转到高级设置并配置安装 NT 服务控制 NT 服务条目。
    • 您可以为服务设置多项设置,包括启动类型(例如自动)和登录凭据(如果需要)。
    • 您提到您的 Installshield 版本具有 System Configuration => Service 视图。通过文件或组件视图添加服务 EXE 文件后使用此视图。
    • 我通常将服务设置为在安装期间启动和停止,在卸载时停止和删除。 如果服务需要凭据才能运行,您需要从 BAT 文件中提取该信息并将其作为属性添加到服务控制项中。

    【讨论】:

      猜你喜欢
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2016-06-20
      • 2011-12-28
      • 2017-08-26
      • 2019-11-24
      • 1970-01-01
      相关资源
      最近更新 更多