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

时间:2016-01-29 23:27:19

标签: 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来操作吗?

由于

1 个答案:

答案 0 :(得分:2)

  

目前.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 Document Transformations),这意味着如果你为xml配置包含一个*.install.xdt文件,choco不会简单地覆盖现有文件。这允许您在包文件夹中升级而不覆盖任何用户配置。但是,如果您要将文件复制到其他地方,则需要自行计算这个方面。

  

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

我们还没有推荐的安装服务或设置网站/网络应用程序的方法。这两件事我们将在未来为他们创造帮助,届时我们将推荐这些途径并提供更好的建议。

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

  

如果其中一个位置正确,那么chocolateyinstall.ps1是将代码放入xcopy二进制文件的逻辑位置吗?

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

  

或者(我希望你说不)这甚至不是巧克力的有效用途?意思是,我应该吮吸它并为Chocolatey创建一个MSI来操作吗?

创建服务和网站绝对是Chocolatey的有效用途。我建议不要创建MSI,除非你需要。这是一个非常复杂的过程,在大多数情况下(比如内部应用程序),感觉有些过度。