是否有任何快速的方法,给定一个可执行文件,创建一个Windows服务,当启动时,启动它?
当前回答
您可以查看我的小型免费实用程序的服务创建\编辑\删除操作。下面是创建示例:
执行服务->修改->创建
可执行文件(谷歌驱动器):[下载]
源代码:[下载]
博客文章:[BlogLink]
服务编辑器类:WinServiceUtils.cs
其他回答
许多现有的答案包括安装时的人工干预。这可能是一个容易出错的过程。如果您有许多可执行文件想要作为服务安装,那么您最不想做的事情就是在安装时手动执行它们。
对于上面描述的场景,我创建了serman,这是一个命令行工具,用于将可执行文件作为服务安装。您所需要编写的(只编写一次)是一个简单的服务配置文件以及可执行文件。运行
serman install <path_to_config_file>
将安装服务。Stdout和stderr都记录了日志。欲了解更多信息,请查看项目网站。
工作配置文件非常简单,如下所示。但它也有许多有用的特性,如下面的<env>和<persistent_env>。
<service>
<id>hello</id>
<name>hello</name>
<description>This service runs the hello application</description>
<executable>node.exe</executable>
<!--
{{dir}} will be expanded to the containing directory of your
config file, which is normally where your executable locates
-->
<arguments>"{{dir}}\hello.js"</arguments>
<logmode>rotate</logmode>
<!-- OPTIONAL FEATURE:
NODE_ENV=production will be an environment variable
available to your application, but not visible outside
of your application
-->
<env name="NODE_ENV" value="production"/>
<!-- OPTIONAL FEATURE:
FOO_SERVICE_PORT=8989 will be persisted as an environment
variable to the system.
-->
<persistent_env name="FOO_SERVICE_PORT" value="8989" />
</service>
也许你所有的答案都更好,但是——只是为了完整地选择选项——我想提醒一下多年来使用的旧的、类似的方法:
SrvAny(由InstSrv安装)
如下所述: https://learn.microsoft.com/en-us/troubleshoot/windows-client/deployment/create-user-defined-service
延伸(凯文·唐)回答。
步骤1:下载并解压缩nssm-2.24.zip
步骤2:从命令行类型:
C:\> nssm.exe install [servicename]
它将打开如下所示的GUI(示例是UT2003服务器),然后简单地浏览到:yourapplication.exe
更多信息:https://nssm.cc/usage
与Sergii Pozharov的答案相同,但使用PowerShell cmdlet:
New-Service -Name "MyService" -BinaryPathName "C:\Path\to\myservice.exe"
参见New-Service了解更多定制。
这只适用于已经实现Windows服务API的可执行文件。
几年前,我创建了跨平台的服务管理器软件,这样我就可以在Windows、Mac和Linux操作系统上启动PHP和其他脚本语言作为系统服务:
https://github.com/cubiclesoft/service-manager
Service Manager是一组预编译的二进制文件,使用几乎相同的命令行选项在目标操作系统上安装和管理系统服务(源代码也可用)。每个平台确实有细微的差异,但核心功能大多是标准化的。
如果子进程死亡,服务管理器将自动重新启动它。
使用Service Manager启动的进程应该定期观察两个通知文件,以处理重新启动和重新加载请求,但它们不一定要这样做。如果子进程没有及时响应受控的重新启动/重新加载请求,Service Manager将强制重新启动子进程。
推荐文章
- GIT克隆在windows中跨本地文件系统回购
- 如何运行一个PowerShell脚本而不显示窗口?
- PowerShell:仅为单个命令设置环境变量
- 为什么这个Windows批处理文件只执行第一行,而在命令shell中执行所有三行?
- 环境变量存储在Windows注册表的哪里?
- 有一个好的Valgrind Windows的替代品吗?
- Windows和Linux上的c++编译:ifdef开关
- 如何验证批处理文件中是否存在一个文件?
- XAMPP -端口80被PID 4的“无法打开进程”使用!12
- 为什么git在Windows下记不住我的密码
- Git克隆/拉不断冻结在“存储密钥在缓存?”
- 有没有替换Windows (Visual C)的unistd.h ?
- 从Windows批处理文件设置系统环境变量?
- 在Sublime Text 2中使用Ctrl+D进行多个选择时,我如何跳过匹配?
- #定义WIN32_LEAN_AND_MEAN具体排除了什么?