中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创][更新] 把任何可执行文件(包括批处理)当作服务
« [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... [18] »
作者:
标题: [原创][更新] 把任何可执行文件(包括批处理)当作服务 上一主题 | 下一主题
asbai
高级用户




积分 653
发帖 252
注册 2006-4-16
状态 离线
『楼 主』:  [原创][更新] 把任何可执行文件(包括批处理)当作服务

■注意■ 竟然有人专门加我 MSN 询问此工具和 XP 下的 SC 命令有何不同。实在让人郁闷。

这里澄清一下,首先,一个 windows service 不是普通的可执行程序。一个应用程序想要成为 service,必须按照契约调用标准的 Windows Service API,与 Windows Service Manager 进行正确交互才可以。具体参见:
http://msdn.microsoft.com/en-us/library/ms681921(VS.85).aspx 和
http://msdn.microsoft.com/en-us/library/ms685967(VS.85).aspx。详细的 API 参考在:http://msdn.microsoft.com/en-us/library/ms685942(VS.85).aspx。

也就是说,SC 命令的作用是安装、删除、启动、停止一个 service。而 runassrv 的作用是将任何非 service 程序变成 service。

如果这样说还是不清楚的话,请尝试一下用 SC 把某个批处理或 notepad.exe 添加为服务会发生什么。


≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
1.1.0.628 版新增内容:

  ■ 所有 Action (例如:add / remove 等)无需再加前缀。
  ■ 新增 pause / continue 操作。
  ■ 现在开始,一个 runassrv 服务可以并发运行多个 /cmdline 指定的应用。
  ■ runassrv.exe 本身不需要放入系统搜索路径中了。
  ■ 新增 control 操作,向指定的服务发送控制码。
  ■ 新增 listsrv 操作,列出所有服务和驱动,支持很多过滤条件。
  ■ 新增 -logfile 和 -loglevel 选项,日志记录功能。
  ■ 新增 -unstoppable 系统服务管理器将拒绝停止一个以该选项安装的服务。
  ■ 内存收缩策略,典型情况下内存开销少于 300KB。
  ■ 解决了在某些系统上 start / stop 命令无效的问题。

≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
前两年写的小东西,发给大家乐呵乐呵~

Run As Service

把任何可执行文件(包括批处理和角本)当作系统服务运行的工具

≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
介绍:

  ■ 将任何可执行文件作为系统服务运行。
  ■ 开始主要是为了移植一些linux 的 daemon;也可以用于在启动任何应用程序和维护性角本。
  ■ 安静地运行,除非指定了 Interactive 模式,否则不会弹出任何窗口。
  ■ 无需登陆,系统启动后自动运行,无需等待用户登陆完毕。
  ■ 作为附带的功能,支持启动、停止和删除任何系统服务。
  ■ 完整接管系统服务管理器的指令(启动、停止等等)。运行的程序终止后,自动向服务管理器提交状态同时自身退出,不会驻留内存。

≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
帮助屏幕:
C:\Documents and Settings\Administrator>
#runassrv

===========================================================================
  Run As Service Ver 1.1.0.625 by BaiYang / 2004 - 2006, Freeware
===========================================================================
Run any program as a Service

USAGE: runassrv <Action> <Options>
===========================================================================
Actions:
  add          - Add a Service.
  remove       - Remove a Service.
  start        - Start a Service.
  stop         - Stop a Service.
  pause        - Pause a Service.
  continue     - Continue a paused Service.
  control      - Control a service by send it a op-code
  listsrv      - List all installed services on local system
  listgrp      - List all service load order groups on local system (by start
                 order).
  -h           - this screen
===========================================================================
Options:
  -cmdline     - when the service start, witch program you want to run.
  -name        - the service name.
  -dispname    - service's display name in service manager
  -desc        - service's description in service manager
                   DEFAULT: none
  -type        - service type, can be:
                   FileSystemDriver
                   KernelDriver
                   OwnProcess (DEFAULT)
                   ShareProcess
                   InteractiveProcess
                 NOTE: set this option incorrectly may endanger your system!
  -starttype   - service start type, can be:
                   SystemStart
                   BootStart
                   AutoStart (DEFAULT)
                   DemandStart
                   Disabled
                 NOTE: set this option incorrectly may endanger your system!
  -errctl      - service error control policy, can be:
                   ErrorIgnore
                   ErrorNormal (DEFAULT)
                   ErrorSevere
                   ErrorCritical
                 NOTE: set this option incorrectly may endanger your system!
  -group       - specify service load order group
                   DEFAULT: none
  -depen       - names of services or load ordering groups that the system
                 must start before this service, delimited by '/'
                   DEFAULT: none
  -user        - specifies the name of the account under which the service
                 should run.
                   DEFAULT: LocalSystem
  -pass        - contains the password to the account name
                   DEFAULT: none
  -priority    - priority of the program you want to run, can be:
                   Idle
                   BelowNormal
                   Normal (DEFAULT)
                   AboveNormal
                   High
                   RealTime
  -unstoppable - make service unstoppable by system service control manager.
  -opcode      - for "control", specify the operation code.
  -logfile     - specify the logging target.
                   DEFAULT: don't log to file.
  -loglevel    - specify the lowest logging level, can be:
                   DebugOnly (Most Detail)
                   Info
                   Warning
                   Error (DEFAULT)
                   FatalError
                   Disabled (Close Logging Output)
===========================================================================
Special Options With "listsrv":
  -name        - list service name that match the wildcard pattern
                   DEFAULT: *
  -dispname    - service display name's wildcard pattern.
                   DEFAULT: *
  -pid         - service belong to specified process.
                   DEFAULT: any
  -type        - specify service types to be match, delimite by "/".
                   DEFAULT: any
  -starttype   - specify service starttypes to be match, delimite by "/".
                   DEFAULT: any
  -group       - service belong to the load order group
                   DEFAULT: any
  -state       - service's current state, can be:
                   active
                   inactive
                   DEFAULT: any
===========================================================================
Examples:
  runassrv add /cmdline:"c:\tools\myapp.exe -arg1 -arg2" /name:"mysrv"
  runassrv add /cmdline:myapp.exe /cmdline:yourapp.exe /name:mysrv
  runassrv add /cmdline:notepad /cmdline:vi.bat /type:interactiveprocess /priority:AboveNormal /name:testsrv /logfile:C:\test.log /loglevel:debugonly /dispname:"My Test Service" /desc:"This is a Test Service"

  runassrv start /name:wuauserv
  runassrv stop /name:wuauserv
  runassrv pause /name:iisadmin
  runassrv control /name:wuauserv /opcode:1

  runassrv listsrv /name:w*
  runassrv listsrv /type:KernelDriver/FileSystemDriver
  runassrv listsrv /starttype:SystemStart/BootStart
  runassrv listsrv /group:pnp_tdi
  runassrv listsrv /pid:1234
  runassrv listgrp
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
简单中文帮助:
C:\Documents and Settings\Administrator>
#runassrv

===========================================================================
  Run As Service Ver 1.1.0.628 by BaiYang / 2004 - 2006, Freeware
===========================================================================
将任何可执行程序作为系统服务运行

用法: runassrv <动作> <选项>
===========================================================================
动作:
  add       - 新增一个服务.
  remove    - 删除一个服务.
  start     - 启动一个服务.
  stop      - 停止一个服务.
  pause     - 暂停一个服务
  continue  - 继续一个被暂停的服务.
  control   - 向指定服务发送一个控制码.
  listsrv   - 列出当前系统中符合条件的所有服务及驱动.
  listgrp   - 列出当前系统中所有服务启动组的优先级顺序.
  -h           - 本帮助屏幕.
===========================================================================
选项:
  -cmdline     - 当服务启动时,指定你真正想要运行那个程序. 这个选项可以被多次使
                 用,每个都指定一个要运行的应用。当服务启动时,这些应用将被并发
                 地执行。
  -name        - 指定系统服务名(net start 等系统操作用).
  -dispname    - 指定用户将要看到的服务显示名称(在服务管理器中看到的名称).
  -desc        - 指定服务描述(在服务管理器中看到的服务描述信息)
                   默认: 无
  -type        - 指定服务类型,可以是以下几种:
                   FileSystemDriver  : 文件系统及驱动,将在内核载入之前被装入,注
                                       意这个级别的服务几乎不可以使用任何系统API。
                   KernelDriver      : 内核级驱动,内核装入后,立即被装入,这个
                                       级别的服务只能使用受限的API。
                   OwnProcess        : 单独进程服务,标准服务,在Win32子系统ready
                                       后启动,默认。
                   ShareProcess      : 共享进程服务,即数个服务共享同一进程,很多
                                       依赖svchost的服务都使用这种类型。
                   InteractiveProcess: 交互式服务,服务可以与用户交互,除了这个类
                                       型以外,其它所有类型的服务都不可能有用户可
                                       见的界面。
                 注意: 错误的设置这个选项可能使系统变得不稳定,甚至无法启动!如果
                       不知道自己正在做什么,请不要尝试前两项。
  -starttype   - 服务启动类型,包括:
                   SystemStart : 系统级启动,在kernel初始化后启动。
                   BootStart   : 由系统装载器启动(kernel初始化前)。
                   AutoStart   : 自动启动,Win32子系统初始化完毕后启动,默认。
                   DemandStart : 手动。
                   Disabled    : 禁用。
                 注意: 错误的设置这个选项可能使系统变得不稳定,甚至无法启动!如果
                       不知道自己正在做什么,请不要尝试前两项。
  -errctl      - 指定服务出错时的错误处理策略,可以是:
                   ErrorIgnore   : 忽略错误,不挽救服务,系统继续运行
                   ErrorNormal   : 记录到系统日志,并且弹出一个对话框提示用户,默
                                   认。(默认)
                   ErrorSevere   : 记录日志并弹出提示框,如果当前系统已经运行于了
                                   最后一次正确启动的配置,则忽略该错误,否则自动
                                   重启到最后一次正确配置。
                   ErrorCritical : 同上,但是如果重启到最后一次正确配置还是启动本
                                   服务失败就蓝屏。
                 注意: 错误的设置这个选项可能使系统变得不稳定,甚至无法启动!如果
                       不知道自己正在做什么,请不要尝试后两项。
  -group       - 指定服务属于的启动优先级组,优先级组可以通过 listgrp 按顺序列出。
                   默认: 无
  -depen       - 指定本服务所依赖的服务,在这里指定的服务必须在本服务启动之前正确
                 启动。多个服务之间用 “/”分割。这里要指定系统服务名,而不是用户
                 看到的那个名称。
                   默认: 无
  -user        - 指定用户身份,即本服务使用那个用户帐号运行
                   默认: LocalSystem(本地系统,最高权限),交互式服务必须使用这个
                         帐号。
  -pass        - 指定用户密码
                   默认: 无(LocalSystem)
  -priority    - cmdline 参数指定程序的运行优先级,可以是(这个不用解释了吧):
                   Idle
                   BelowNormal
                   Normal (默认)
                   AboveNormal
                   High
                   RealTime
  -unstoppable - 系统服务管理器将拒绝停止以此选项安装的服务。
  -opcode      - 为 control 命令指定要发送的控制码。控制码 “1”其实相当于命令
                 stop,用于停止服务。除了几个标准的控制码外,大部分控制码所对应的
                 行为由服务自己定义。
  -logfile     - 指定日志文件
                   默认: 不记录日志文件
  -loglevel    - 指定日志记录的详细程度,可以是:
                   DebugOnly (记录所有运行细节)
                   Info
                   Warning
                   Error (默认)
                   FatalError
                   Disabled (关闭对控制台和文件的日志输出)
===========================================================================
使用 listsrv 命令时的特殊选项:
  -name        - 指定要列出的服务名通配符
                   默认: *
  -dispname    - 指定要列出的服务显示名称通配符
                   默认: *
  -pid         - 仅列出运行于指定进程的服务
                   默认: 所有进程
  -type        - 仅列出指定类型的服务, 多个服务类型间使用 "/" 分割
                   默认: 所有类型
  -starttype   - 仅列出指定启动类型的服务, 多个类型间使用 "/" 分割
                   默认: 所有类型
  -group       - 进列出位于指定启动组的服务
                   默认: 任意组
  -state       - 仅列出当前状态满足指定值的服务, 可以是:
                   active   : 服务当前处于活动状态(正在启动、运行等)
                   inactive : 服务当前处于非活动状态(已停止)
                   默认     : 任意
===========================================================================
例子:
  runassrv add /cmdline:"c:\tools\myapp.exe -arg1 -arg2" /name:"mysrv"
  runassrv add /cmdline:myapp.exe /cmdline:yourapp.exe /name:mysrv
  runassrv add /cmdline:notepad /cmdline:vi.bat /type:interactiveprocess /priority:AboveNormal /name:testsrv /logfile:C:\test.log /loglevel:debugonly /dispname:"My Test Service" /desc:"This is a Test Service"

  runassrv start /name:wuauserv
  runassrv stop /name:wuauserv
  runassrv pause /name:iisadmin
  runassrv control /name:wuauserv /opcode:1

  runassrv listsrv /name:w*
  runassrv listsrv /type:KernelDriver/FileSystemDriver
  runassrv listsrv /starttype:SystemStart/BootStart
  runassrv listsrv /group:pnp_tdi
  runassrv listsrv /pid:1234
  runassrv listgrp

===========================================================================
关于命令和参数的分隔符:
  所有参数以 “-” 或 “/” 为前缀;需要赋值得参数以 “:” 或 “=”作为
  赋值运算符,例如:-name="mysrv"; /name:"mysrv"; -name:"mysrv" 等组合都
  是合法的。
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
版权:免费软件;作者不承担任何责任。您可以将它用于任何用途,只要不做坏事

≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
联系作者:http://www.cn-dos.net/forum 或 asbai@msn.com

有事尽量论坛或 email 联系。不过要是你喜欢玩星际并且是手速跟我一样低(不超过100)的菜鸟,欢迎加我的 MSN ^_^

[ Last edited by asbai on 2008-6-3 at 01:33 PM ]

   此帖被 +43 点积分      点击查看详情   
评分人:【 qzwqzw 分数: +15  时间:2007-3-15 08:40
评分人:【 JohnsonHE 分数: +1  时间:2007-4-29 23:33
评分人:【 tashaxin 分数: +2  时间:2007-5-22 21:16
评分人:【 chainliq 分数: +3  时间:2007-6-1 04:37
评分人:【 xiaoshuq 分数: +2  时间:2007-10-13 11:41
评分人:【 523066680 分数: +15  时间:2009-1-23 14:59
评分人:【 分数: +1  时间:2010-10-12 17:39
评分人:【 sky96111 分数: +1  时间:2016-1-8 23:02
评分人:【 zzkwhl 分数: +1  时间:2017-8-13 07:43
评分人:【 zzz19760225 分数: +2  时间:2018-4-4 11:49


附件 1: runassrv.rar (2006-6-28 12:07, 115.34 K, 下载附件所需积分 1 点 ,下载次数: 2845)
2006-6-22 14:18
查看资料  发送邮件  发短消息 网志   编辑帖子
ebfoo
初级用户





积分 31
发帖 9
注册 2006-6-21
来自 cs
状态 离线
『第 2 楼』:  

真乃牛人也!
先收下了


   此帖被 +1 点积分    点击查看详情   
评分人:【 分数: +1  时间:2009-6-4 06:07


2006-6-22 23:44
查看资料  发送邮件  发短消息 网志   编辑帖子
Cappuccin0
新手上路





积分 9
发帖 7
注册 2006-6-22
状态 离线
『第 3 楼』:  

在DRL上面看到帖子可惜没权限下载,遂就跑到这来了~~
顺便想问一下楼主这个程序的进程是否会被任务管理器中中止掉?就是注册为那种unstoppable service.

   此帖被 +1 点积分    点击查看详情   
评分人:【 zzkwhl 分数: +1  时间:2017-8-13 07:44


2006-6-23 00:22
查看资料  发短消息 网志   编辑帖子
asbai
高级用户




积分 653
发帖 252
注册 2006-4-16
状态 离线
『第 4 楼』:  



  Quote:
Originally posted by Cappuccin0 at 2006-6-23 00:22:
在DRL上面看到帖子可惜没权限下载,遂就跑到这来了~~
顺便想问一下楼主这个程序的进程是否会被任务管理器中中止掉?就是注册为那种unstoppable  ...

呵呵,DRL是啥东东阿?做的时候是写成了unpauseble,但没写成unstoppable。也没给这个选项,因为实在想不出这个选项有什么用。

2006-6-23 01:52
查看资料  发送邮件  发短消息 网志   编辑帖子
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 5 楼』:  

试了一下,发现asbai的编程水平确实不错。不过,发现/add和/remove都可以用,而/start和/stop好像有时不能正常使用(如用net start和net stop则可以)。比如:

C:\>runassrv /stop /name:"MySQL"

=======================================================================
  Run As Service Ver 1.0.0.3 by BaiYang / 2004, Freeware
=======================================================================

[APPLICATION ERROR] 9 :: CSrvApp::_StopSrv() - unable stop the service.
  service name = MySQL
  error number = 0
  error description = The operation completed successfully.

C:\>net stop MySQL
The MySQL service is stopping..
The MySQL service was stopped successfully.


C:\>



Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2006-6-23 02:30
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子
ebing
初级用户




积分 130
发帖 12
注册 2003-10-22
状态 离线
『第 6 楼』:  

学习收藏了,谢谢!

2006-6-23 09:48
查看资料  发送邮件  发短消息 网志   编辑帖子
asbai
高级用户




积分 653
发帖 252
注册 2006-4-16
状态 离线
『第 7 楼』:  



  Quote:
Originally posted by Wengier at 2006-6-23 02:30:
试了一下,发现asbai的编程水平确实不错。不过,发现/add和/remove都可以用,而/start和/stop好像有时不能正常使用(如用net start和net stop则可以)。比如..

能不能麻烦Wengier兄给个故障重现的步骤?

2006-6-23 15:31
查看资料  发送邮件  发短消息 网志   编辑帖子
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 8 楼』:  

srvany




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-6-23 15:47
查看资料  发送邮件  发短消息 网志   编辑帖子
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 9 楼』:  



  Quote:
Originally posted by asbai at 2006-6-23 03:31 PM:


能不能麻烦Wengier兄给个故障重现的步骤?;)

5楼中其实就有重现的方法的,当然其中的"MySQL"可以改成其它类似的存在的服务。



Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2006-6-23 23:09
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子
asbai
高级用户




积分 653
发帖 252
注册 2006-4-16
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by Wengier at 2006-6-23 23:09:


5楼中其实就有重现的方法的,当然其中的"MySQL"可以改成其它类似的存在的服务。

sorry, 我以为兄台说的:“好像有时不能正常使用” 是指在某些特定环境下,按照特定流程操作才会发生。

偶这就去看看。

2006-6-24 05:53
查看资料  发送邮件  发短消息 网志   编辑帖子
asbai
高级用户




积分 653
发帖 252
注册 2006-4-16
状态 离线
『第 11 楼』:  

Wengier兄用的Windows版本是?

2006-6-24 12:52
查看资料  发送邮件  发短消息 网志   编辑帖子
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 12 楼』:  

Windows XP SP2英文版



Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2006-6-24 14:05
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子
zhweller
新手上路





积分 2
发帖 1
注册 2006-6-25
状态 离线
『第 13 楼』:  

找它很久了!!!

2006-6-25 13:26
查看资料  发送邮件  发短消息 网志   编辑帖子
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 14 楼』:  

hoho~~~看到原贴了

http://www.et8.net/bbs/showthread.php?t=763159




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-6-25 15:11
查看资料  发送邮件  发短消息 网志   编辑帖子
asbai
高级用户




积分 653
发帖 252
注册 2006-4-16
状态 离线
『第 15 楼』:  



  Quote:
Originally posted by electronixtar at 2006-6-25 15:11:
hoho~~~看到原贴了

http://www.et8.net/bbs/showthread.php?t=763159

electronixtar兄搞错了吧?仔细看看,这里才是原贴,^_^

   此帖被 +3 点积分    点击查看详情   
评分人:【 分数: +1  时间:2009-2-10 11:45
评分人:【 chenwenwei 分数: +1  时间:2010-9-9 21:26
评分人:【 分数: +1  时间:2010-10-12 17:37


2006-6-28 02:03
查看资料  发送邮件  发短消息 网志   编辑帖子
« [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... [18] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: