安装指向动态服务位置的Windows服务

时间:2018-03-22 11:47:46

标签: c# windows-services

标题不是很好,但我不知道如何总结我想做的事情。

我在C#中有一个Windows .net服务,它在特定位置从TFS构建

c:\TFS\App1\1.0.0.0\App.exe
c:\TFS\App1\1.0.0.1\App.exe
c:\TFS\App1\1.0.0.2\App.exe

我有另一个文件夹

c:\TFS\App1\Current

我每次构建服务时都会复制最新版本。 Windows机器上服务的安装路径来自当前文件夹,因此我不需要安装/卸载该服务。

因此,升级服务的过程目前如下:

1. Build
2. Stop Service
3. Copy from x.x.x.x folder to Current
4. Start Service

有没有办法制作某种快捷方式,以便每次部署新内容时都不会复制文件,我只是更改配置以指向新位置?

我在想的可能是创建一个叫另一项服务的服务,但我不知道这是否可行。

e.g。 安装名为" App1"那是从" C:\ TFS \ ServiceStarter \ Start.exe App1"运行的。 Start.exe.config文件将包含我想要运行的服务的位置。

每当我进行新的构建时,我都会转到start.exe.config并相应地更改路径。停止 - 启动服务,新版本正在运行。

新的升级方式是:

1. Build
2. Change config file to point to X.X.X.X location
3. Restart service

这可能吗?

1 个答案:

答案 0 :(得分:0)

这不是你要求的,但它会使事情自动化很多。您可以使用简单的bat文件:

批处理文件命令:

@REM If the batch file is going to run as as administrator, the starting path will be the system32 folder. With this we ensure that the starting path is the folder containing the batch file.
@cd /d "%~dp0"

@REM stop and delete the previous service using the service name
sc stop MyServiceName
sc delete MyServiceName

@REM ask for the version of the service
set /p version="Enter version: "

@REM create the path to executable
SET relativePath=%CD%
SET executablePath=%relativePath%\%version%\App.exe

@REM istall the service
sc create MyServiceName binPath= "%executablePath%" DisplayName= "MyServiceName"

@REM start the service
sc start MyServiceName

pause

批处理文件执行

enter image description here

所以,你需要:

  1. 创建批处理文件。
  2. 将批处理文件添加到“App1”文件夹
  3. 以管理员身份运行
  4. 要定位正确的版本,只需在命令行中输入
  5. 即可

    现在,只需执行批处理文件,您就可以切换到任何版本。