我正在描绘一组程序的架构,这些程序共享存储在数据库中的各种相互关联的对象.我希望其中一个程序充当服务,为这些对象的操作提供更高级别的接口,以及通过该服务访问对象的其他程序.
我目前的目标是将Python和Django框架作为实现该服务的技术.我很确定我想知道如何在Linux中守护Python程序.但是,它是系统应支持Windows的可选规范项.我对Windows编程没什么经验,也没有Windows服务的经验.
是否可以将Python程序作为Windows服务运行(即在没有用户登录的情况下自动运行)?我不一定要实现这一部分,但我需要大致了解如何做以决定是否按照这些方式进行设计.
编辑:感谢目前为止的所有答案,它们非常全面.我想知道一件事:Windows如何了解我的服务?我可以使用本机Windows实用程序进行管理吗? 在/etc/init.d中放置一个启动/停止脚本相当于什么?
我想修改我的应用程序的路径,但这样做会打破它,因为该服务仍指向旧位置.
通过转到Administrative Tools > Services您可以打开属性对话框并查看Path to executable,但无法更改它.
有没有办法用户可以修改服务路径而无需重新安装应用程序?
我刚刚继承了一个需要在XP和Vista上作为服务安装的java应用程序.自从我以任何形式使用Windows以来已经过去了大约8年,我从来没有创建过服务,更不用说像java应用程序这样的东西(我有一个应用程序jar和一个依赖jar - log4j ).将此作为服务运行所需的魔力是什么?我有源代码,因此可以进行代码修改,但最好是避免代码修改.
我正在尝试部署Windows服务但不太确定如何正确执行.我将它构建为控制台应用程序,我现在将其转换为Windows服务项目,并从服务中的OnStart方法调用我的类.
我现在需要在没有Visual Studio的服务器上安装它,如果我正确理解它意味着我不能使用InstallUtil.exe而必须创建一个安装程序类.它是否正确?
我确实看过上一个问题,安装没有InstallUtil.exe的.NET Windows服务,但我只是想确保我已经正确理解它.
如果我创建了问题的接受答案链接到的类,下一步是什么?将MyService.exe和MyService.exe.config上传到服务器,双击exe文件,Bob是我的叔叔?
该服务只能安装在一台服务器上.
我有一个包含Java应用程序的JAR文件.如何在不需要用户交互的情况下从Windows开始?
我想将Java应用程序作为服务运行.不幸的是,我受限制的是我不能使用像Java Service Wrapper这样的东西(看起来确实是一个很好的工具).
有没有办法在不依赖外部应用程序的情况下将可执行JAR作为服务运行?我目前已安装该服务,但无法启动.这是我遇到困难的地方,除了有关JSW的信息之外,我无法在谷歌上找到任何东西.
我们有一个Windows服务应用程序,可以接受命令行参数,如:
MyService -option
Run Code Online (Sandbox Code Playgroud)
到目前为止,当我们想要使用参数启动服务时,我们可以从"服务属性"对话框(在"启动参数"框中)或使用命令手动执行此操作
sc start MyService -option
Run Code Online (Sandbox Code Playgroud)
我们想要的是一种使用此参数"永久"安装服务的方法,这样用户只需每次都可以启动/停止它而无需设置参数.
顺便说一句,在ImagePath注册表项中添加参数不起作用,也没有像这样安装:
MyService -option /install
Run Code Online (Sandbox Code Playgroud)
更新:感谢您到目前为止的答案,这有助于我完善问题.
我想要实现的是在同一个可执行文件中有多个服务的情况下,将参数设置为服务级别本身(与属性一样).binpath配置选项仅仅是更新注册表中的ImagePath条目.这不是特定于服务的.
我用Delphi为客户端服务器应用程序创建了一个Windows服务.
要安装它,我使用
c:\Test\MyService.exe /install (or /uninstall)
Run Code Online (Sandbox Code Playgroud)
这将安装该服务,并在Windows服务中列出"MyService"名称和空描述.
如何定义不同的名称并插入描述(在运行时可以看到services.msc)?
注意:我需要这个,因为在同一台机器上我需要安装更多次相同的服务(每个数据库1个).
目前我唯一的解决方法是重命名服务exe,但我更愿意找到正确的命令行方式(因为我这样做ShellExecute).
更新:不知怎的,我会寻找类似的东西(这当然只是出于解释原因! - InstallService.exe是我刚刚发明的名字):
InstallService.exe c:\Test\MyService.exe /install /name='MyService1'
/description='This is my service for database 1'
Run Code Online (Sandbox Code Playgroud)
而且更紧凑的版本会很好:
c:\Test\MyService.exe /install /name='MyService1'
/description='This is my service for database 1'
Run Code Online (Sandbox Code Playgroud) 我有一个用Delphi构建的服务应用程序,效果很好.它完全符合我的要求而且一切都很开心.一切都很好,直到我想在一台机器上运行该服务的两个(或更多)实例.由于服务名称被硬编码到程序中(通过服务的Name属性),我只能在任何给定的计算机上安装一次服务.如果我尝试在运行时修改Name属性,则除非将Name属性设置为在设计时设置的相同内容,否则服务不会响应.
我已经为此做了一个解决方法,我将所有代码都没有直接与服务控制管理器交互,这些代码被封装到单独的单元中.然后我为每个我想要服务的实例编写一个单独的Delphi项目,该项目具有足够的代码来启动自身并开始运行主代码.
在我看来,这种方法很难看,效率肯定很低.它适用于两个实例,但后来我们需要第三个和第四个......
有没有什么方法可以修改我的代码,这样我只有一个Delphi项目可以安装和运行自己作为多个服务实例与一些简单的运行时输入(例如命令行标志)?
或许是一个更广泛的问题:是否有"正确的方法"来实现目标?
我正在尝试按照本指南在我的Windows Vista上设置Apache 2.4 .但是当我运行comman httpd -k install时,我感到非常恐怖
//错误(OS 5)访问被拒绝.:AH00369:无法打开WinNT服务管理器,您可能忘记以管理员身份登录?
我在计算机上打开时没有以管理员身份登录.当我检查控制面板,管理工具,然后服务Apache不在列表中.
任何人都可以帮忙吗?
我正在开发一个Windows服务,我差不多完成了,
我是使用Visual Studio 2012做的.
我连接到该App.config文件以读取连接字符串,因为Windows服务处理数据库中安装的数据.
我可以在我的机器上安装这个Windows服务,但我问这个服务是否仍然可以从App.config安装后读取?或者我必须硬编码连接字符串?
我希望我能够解释我的问题.但是,如果您不理解我,请告诉我更多信息.
最良好的问候,
windows ×6
java ×3
c# ×2
install ×2
apache2 ×1
command-line ×1
delphi ×1
deployment ×1
installation ×1
parameters ×1
python ×1
service ×1
shellexecute ×1
startup ×1