c# - 将 Windows 服务部署/安装自动化到多个远程端点的最佳方式?

标签 c# .net deployment windows-services

<分区>

我正在寻找可用于“Windows 服务”的最佳自动部署方法。我调查了AppFabric ,但是这似乎非常适合网络服务/IIS 和 WCF。

我也研究了 MSDeploy,但这似乎并没有真正涵盖我正在寻找的所有功能。

作为示例,我有一个包含多个项目/Windows 服务的 .NET 解决方案。我想将这些包远程部署到多个服务器,然后远程安装 Windows 服务。全部来自一个脚本/机器。无需让用户登录到相应的服务器并手动安装。

有没有什么软件可以做到这一点?

最佳答案

我编写了工具来处理这个问题,而不仅仅是一个基本的脚本示例。不过,我将讨论基本的脚本示例。

通过批处理脚本解决此问题的一种方法是调用 PsExec(SysInternals 工具之一)。您可以使用 PsExec 来远程执行任务。您需要指定的凭据需要是远程计算机上的本地管理员。例如:

PsExec \\computername -u adminuser -p adminuserpassword somecommand somecommandarguments

如果我想在两个目录之间复制一个文件,我可以这样做:

PsExec \\computername -u adminuser -p adminuserpassword xcopy "C:\TestFile.txt" "C:\MyDir\TestFile.txt" /i /e /r /y

我喜欢将 SysInternals 工具下载到 TOOLS 目录并将其添加到我的 PATH 环境变量中,这样我就不需要使用 PsExec 的完整路径。

您可以将此与将 Windows 服务包装在 MSI 中以进行打包和安装相结合。在 MSI 包中,您将能够定义如何安装 Windows 服务,以便它随 Windows 一起启动,手动启动,或以您喜欢的其他方式启动。您还可以设置用户帐户来运行它。我总是喜欢手动启动服务。使用命令行工具 MSIEXEC 运行 MSI 包。您可以将这些命令链接在一起以执行复制和部署,如下所示:

PsExec \\computername -u adminuser -p adminuserpassword xcopy "\\buildserver\DeploymentPackages\MyWinService-v1\MyWinService.msi" "C:\Updates\MyWinService.msi" /i /e /r /y

PsExec \\computername -u adminuser -p adminuserpassword MSIEXEC /i "C:\Updates\MyWinService.msi" INSTALLDIR="C:\Program Files (x86)\MyWinService"

PsExec \\computername -u adminuser -p adminuserpassword sc start "MyWinService"

您不需要 PsExec 在远程计算机上执行 SC.exe,因为它可以选择指定机器。

希望这可以帮助您找到一些地方。我包括指向 SysInternals 工具和 Windows Installer XML (WiX) 的链接,以从 Visual Studio 内部构建 MSI 包。

PsExec from the SysInternals Suite

Windows Installer XML (WiX)

关于c# - 将 Windows 服务部署/安装自动化到多个远程端点的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4735885/

相关文章:

c# - ASP.NET Core 子文件夹上的 MapFallbackToPage

c# - Unity C#无法从迭代器返回值。使用yield return语句返回一个值,或使用yield break结束迭代

.net - 是否可以使用.net RSACryptoServiceProvider 使用私钥加密?

javascript - 在与 Create-React-App 一起使用时,我们应该导入整个库还是特定的单个组件?

ruby-on-rails - 将 Rails 应用程序部署到 EC2

Tomcat 上的部署问题

c# - RESTful 服务基本身份验证

c# - ssl webservice中的自定义用户名/密码

c# - 迭代器和枚举器的区别

c# - 如何重新生成 EDMX 文件?