如何使用InstallShield在安装期间将已安装的Windows服务启动类型配置为自动

时间:2018-04-20 07:06:23

标签: windows-installer installshield

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

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

2)有些我如何设法创建一个自定义操作,运行我的.bat文件来启动服务,它工作正常。现在InstallShield中有哪种方法可以将服务Startup Type更改为自动?

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

对于您的类型信息,我使用的是InstallShiled 2014 Premier版本,我正在使用BasicMSI项目类型。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

服务安装 :批处理文件不作为服务运行(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文件中提取该信息,并将其作为属性添加到服务控制项中。