【问题标题】:What is the best practice for setting user service runs under when automating service deployment?自动化服务部署时设置用户服务运行的最佳实践是什么?
【发布时间】:2011-11-20 11:41:35
【问题描述】:

我们正在尝试自动部署我们创建的一些服务。我们不想将用户名和密码硬编码到应用程序安装程序中。不对用户名和登录名进行硬编码的问题在于,它会使发布的自动化成为问题。

您将如何在 msi 中打包 Windows 服务:

  1. 安装该服务以在特定用户名下运行,具体取决于环境实例。即在生产中,它在 DOMAIN_NAME\ProductionServiceUser 下运行,但如果我们将相同的服务部署到 staging 中,该服务将在 DOMAIN_NAME\StagingServiceUser 下运行。

  2. 如果您通过“添加删除程序”卸载该服务,该服务将被删除。

【问题讨论】:

    标签: c++ windows deployment service automation


    【解决方案1】:

    要自动安装和卸载服务,您可以使用 Windows Installer 支持:

    Visual Studio 安装项目不支持服务表。因此,如果您正在使用它,您将需要编写管理服务的安装和卸载自定义操作。其他设置创作工具提供对服务的直接支持。

    要动态设置服务帐户,您可以使用自定义 installer property,例如 SERVICE_ACCOUNT。在安装期间,您可以将此属性设置为您想要的帐户。这可以通过多种方式完成:自定义操作、对话框控件、命令行等。

    只有为自定义用户帐户设置了log on as a service policy 时,服务才能在自定义用户帐户下运行,即使它是管理员帐户也是如此。可以在安装过程中使用 ntrights.exe 作为自定义操作来设置此策略。

    【讨论】:

    • 我应该更清楚。这是一个非托管 C++ 服务。我想我们可以有一个 C# 库项目来执行服务安装,但是自定义操作存在一些问题,因为出于某种原因,MS 认为不以正在执行的用户身份运行自定义操作是个好主意安装。
    • 我不确定我是否理解这与我的建议相悖。如果要使用 Visual Studio,唯一的解决方案是自定义操作。如果您不想使用自定义操作,则不能使用 Visual Studio(您需要支持服务的不同设置创作工具)。
    • 自定义操作很好,我们正在使用它们,但我想问更多关于如果您希望服务在特定用户帐户下运行,如何自动部署 msi。
    • 基本上,您可以通过自定义操作设置服务用户帐户,并使用 ntrights.exe 为该帐户设置“作为服务登录”策略。没有什么可以自动化的了。就像我提到的,Visual Studio 不支持这个,所以你只能手动完成。
    • 我不明白你的意思。我们已经在使用自定义操作来执行此操作,并且效果很好。问题是,如果我们想自动将服务设置为在用户帐户下运行,我们必须将用户名和密码硬编码到安装程序中。
    猜你喜欢
    • 2018-09-28
    • 2013-03-27
    • 2012-07-02
    • 2010-10-03
    • 1970-01-01
    • 2011-01-17
    • 2017-02-15
    • 2020-04-06
    • 2013-07-12
    相关资源
    最近更新 更多