我最近制作了一个包含多个部分的应用程序。其中一个部分是网络工具 - 它始终随操作系统启动,并且从不显示任何消息。但是,它确实启动了一个非常烦人的控制台,如果不关闭程序本身,就无法摆脱它(请接受这个给定的控制台)。我决定通过将程序(它是一个*.exe
)作为服务启动来解决这个问题,从而完全阻止它显示。由于该应用程序将分发到各种计算机(因此首先需要一个网络工具)。我需要一种方法来使该程序作为服务安装(因此,我不希望得到这样的答案:告诉我浏览控制面板上的一系列菜单或下载第三方应用程序,而该应用程序必须保留在服务将在其上运行的任何计算机上)。我该怎么做?
答案1
在 Windows NT 资源工具包中,Microsoft 提供了一个名为的工具srvany
,它将.exe
以服务的形式运行。比它更好的工具是非吸吮服务管理器 (nssm)。
我已经使用 nssm 将作为 Web 服务器的 python 控制台可执行文件转换为系统成功启动时运行的服务。
答案2
微软已经整理了创建 Windows 服务并将其安装在远程计算机上的步骤页。步骤太多,无法在此一一列举。还有其他链接可以帮助您解决潜在问题。
答案3
在我看来,NSSM 是实现此目的的最佳工具。首先,它是开源的,其次,它支持所有版本的 Windows。此工具的另一个优点是它可以监控服务,如果服务失败,它会自动重新启动服务。以下是有关如何使用它的详细指南。
答案4
有许多第三方工具可以将普通的 Windows 可执行文件作为服务运行。
Bitsum 编写了这样一款实用程序,仅使用命令行,名为制作服务(由于滥用,现在分发有限)。
它通过使用服务存根来实现这一点,然后启动正常的 Windows 可执行文件。然后,该服务存根可以控制已启动的进程,以响应启动、停止和暂停等服务命令。
但是,如果您的应用程序与用户有任何交互,那么您会在 NT6+ 中遇到系统服务会话隔离。
虽然我们不得不停止这个免费软件实用程序,但我们仍然会将其分发给有合法需要的人。
我确信还有其他类似的实用程序,包括 Windows 资源工具包中的 Microsoft srvany.exe,正如接受的答案所建议的那样。它的功能与我们的 MakeService 相同。