使用Chocolatey安装Windows服务的"正确"方法是什么?

Jos*_*del 5 topshelf chocolatey

我正在寻找关于如何打包我的TopShelf托管Windows服务以通过Chocolatey分发的一些指导.目前.nuspec将.exe和所有.dll放入\tools文件夹,这意味着它们最终安装到ProgramData\chocolatey\lib\our-service\tools.这似乎不对.事实上,在我注意到卸载记录各种错误之前,这不是问题.哪些都与Chocolatey试图备份文件有关,但因为服务正在运行而无法使用.chocolateyuninstall.ps1会停止服务,但直到备份尝试后才会运行.

应用程序本身ProgramData\MyCompany\MyApp用于所有数据和日志记录.我也应该把二进制文件放在那里吗?或者Program Files更合适?如果其中一个位置正确,那么chocolateyinstall.ps1是将代码放入xcopy二进制文件的逻辑位置吗?或者(我希望你说不)这甚至不是巧克力的有效用途?意思是,我应该吮吸它并为Chocolatey创建一个MSI来操作吗?

谢谢

fer*_*der 3

目前 .nuspec 将 .exe 和所有 .dll 放入该\tools文件夹中,这意味着它们最终安装到ProgramData\chocolatey\lib\our-service\tools. 这似乎不对。事实上,直到我注意到卸载记录了各种错误之前,这并不是一个问题。这些都与 Chocolatey 尝试备份文件但无法备份有关,因为服务正在运行,文件正在使用中。Chocolateyuninstall.ps1 停止该服务,但直到尝试备份后才运行。

我们添加了一个 ChocolateyBeforeModify.ps1 脚本,该脚本将在升级/卸载之前运行 - https://github.com/chocolatey/choco/issues/268。这应该是在 0.9.10 中,将有助于使工作流程更加顺畅。

目前,您必须在尝试升级或卸载之前停止 Chocolatey 之外的服务。

另一件需要考虑的事情是 Chocolatey 利用了XDT(Xml 文档转换),这意味着如果您包含*.install.xdtxml 配置文件,choco 不会简单地覆盖现有文件。这允许您在包文件夹中升级,而无需覆盖任何用户配置。但是,如果您要将文件复制到其他地方,则需要自己解决这个问题。

应用程序本身用于ProgramData\MyCompany\MyApp所有数据和日志记录。我也应该把二进制文件放在那里吗?还是Program Files更合适?

我们还没有安装服务或设置网站/网络应用程序的推荐方法。我们将来将为这两件事创建助手,届时我们将推荐这些途径,并就事情的走向提出更好的建议。

更新20170324:我们现在Install-ChocolateyWindowsService在Chocolatey 商业版中拥有和其他服务相关的功能。

如果这些位置之一正确,那么 Chocolateyinstall.ps1 是否是将代码复制到二进制文件的逻辑位置?

自动化脚本是执行添加包位后需要执行的任何操作的逻辑位置。

或者(我希望你说不)这甚至不是 Chocolatey 的有效使用吗?意思是,我应该忍耐并为 Chocolatey 创建一个 MSI 来运行吗?

创建服务和网站绝对是 Chocolatey 的有效使用。我建议除非需要,否则不要创建 MSI。这是一个相当复杂的过程,在大多数情况下(比如内部应用程序),感觉有点矫枉过正。