Board logo

标题: [其他] 把任何可执行文件(包括批处理)当作服务 runassrv.exe [打印本页]

作者: Batcher    时间: 2009-3-20 21:56     标题: 把任何可执行文件(包括批处理)当作服务 runassrv.exe

友情提示:这个命令行工具会被部分杀毒软件干掉,请自行斟酌是否使用。
下载地址:http://cndos.fam.cx/forum/viewthread.php?tid=21426

■注意■ 竟然有人专门加我 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 模式,否则不会弹出任何窗口。
  ■ 无需登陆,系统启动后自动运行,无需等待用户登陆完毕。
  ■ 作为附带的功能,支持启动、停止和删除任何系统服务。
  ■ 完整接管系统服务管理器的指令(启动、停止等等)。运行的程序终止后,自动向服务管理器提交状态同时自身退出,不会驻留内存。

≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
帮助屏幕:
  1. C:\Documents and Settings\Administrator>
  2. #runassrv
  3. ===========================================================================
  4.   Run As Service Ver 1.1.0.625 by BaiYang / 2004 - 2006, Freeware
  5. ===========================================================================
  6. Run any program as a Service
  7. USAGE: runassrv <Action> <Options>
  8. ===========================================================================
  9. Actions:
  10.   add          - Add a Service.
  11.   remove       - Remove a Service.
  12.   start        - Start a Service.
  13.   stop         - Stop a Service.
  14.   pause        - Pause a Service.
  15.   continue     - Continue a paused Service.
  16.   control      - Control a service by send it a op-code
  17.   listsrv      - List all installed services on local system
  18.   listgrp      - List all service load order groups on local system (by start
  19.                  order).
  20.   -h           - this screen
  21. ===========================================================================
  22. Options:
  23.   -cmdline     - when the service start, witch program you want to run.
  24.   -name        - the service name.
  25.   -dispname    - service's display name in service manager
  26.   -desc        - service's description in service manager
  27.                    DEFAULT: none
  28.   -type        - service type, can be:
  29.                    FileSystemDriver
  30.                    KernelDriver
  31.                    OwnProcess (DEFAULT)
  32.                    ShareProcess
  33.                    InteractiveProcess
  34.                  NOTE: set this option incorrectly may endanger your system!
  35.   -starttype   - service start type, can be:
  36.                    SystemStart
  37.                    BootStart
  38.                    AutoStart (DEFAULT)
  39.                    DemandStart
  40.                    Disabled
  41.                  NOTE: set this option incorrectly may endanger your system!
  42.   -errctl      - service error control policy, can be:
  43.                    ErrorIgnore
  44.                    ErrorNormal (DEFAULT)
  45.                    ErrorSevere
  46.                    ErrorCritical
  47.                  NOTE: set this option incorrectly may endanger your system!
  48.   -group       - specify service load order group
  49.                    DEFAULT: none
  50.   -depen       - names of services or load ordering groups that the system
  51.                  must start before this service, delimited by '/'
  52.                    DEFAULT: none
  53.   -user        - specifies the name of the account under which the service
  54.                  should run.
  55.                    DEFAULT: LocalSystem
  56.   -pass        - contains the password to the account name
  57.                    DEFAULT: none
  58.   -priority    - priority of the program you want to run, can be:
  59.                    Idle
  60.                    BelowNormal
  61.                    Normal (DEFAULT)
  62.                    AboveNormal
  63.                    High
  64.                    RealTime
  65.   -unstoppable - make service unstoppable by system service control manager.
  66.   -opcode      - for "control", specify the operation code.
  67.   -logfile     - specify the logging target.
  68.                    DEFAULT: don't log to file.
  69.   -loglevel    - specify the lowest logging level, can be:
  70.                    DebugOnly (Most Detail)
  71.                    Info
  72.                    Warning
  73.                    Error (DEFAULT)
  74.                    FatalError
  75.                    Disabled (Close Logging Output)
  76. ===========================================================================
  77. Special Options With "listsrv":
  78.   -name        - list service name that match the wildcard pattern
  79.                    DEFAULT: *
  80.   -dispname    - service display name's wildcard pattern.
  81.                    DEFAULT: *
  82.   -pid         - service belong to specified process.
  83.                    DEFAULT: any
  84.   -type        - specify service types to be match, delimite by "/".
  85.                    DEFAULT: any
  86.   -starttype   - specify service starttypes to be match, delimite by "/".
  87.                    DEFAULT: any
  88.   -group       - service belong to the load order group
  89.                    DEFAULT: any
  90.   -state       - service's current state, can be:
  91.                    active
  92.                    inactive
  93.                    DEFAULT: any
  94. ===========================================================================
  95. Examples:
  96.   runassrv add /cmdline:"c:\tools\myapp.exe -arg1 -arg2" /name:"mysrv"
  97.   runassrv add /cmdline:myapp.exe /cmdline:yourapp.exe /name:mysrv
  98.   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"
  99.   runassrv start /name:wuauserv
  100.   runassrv stop /name:wuauserv
  101.   runassrv pause /name:iisadmin
  102.   runassrv control /name:wuauserv /opcode:1
  103.   runassrv listsrv /name:w*
  104.   runassrv listsrv /type:KernelDriver/FileSystemDriver
  105.   runassrv listsrv /starttype:SystemStart/BootStart
  106.   runassrv listsrv /group:pnp_tdi
  107.   runassrv listsrv /pid:1234
  108.   runassrv listgrp
复制代码
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
简单中文帮助:
  1. C:\Documents and Settings\Administrator>
  2. #runassrv
  3. ===========================================================================
  4.   Run As Service Ver 1.1.0.628 by BaiYang / 2004 - 2006, Freeware
  5. ===========================================================================
  6. 将任何可执行程序作为系统服务运行
  7. 用法: runassrv <动作> <选项>
  8. ===========================================================================
  9. 动作:
  10.   add       - 新增一个服务.
  11.   remove    - 删除一个服务.
  12.   start     - 启动一个服务.
  13.   stop      - 停止一个服务.
  14.   pause     - 暂停一个服务
  15.   continue  - 继续一个被暂停的服务.
  16.   control   - 向指定服务发送一个控制码.
  17.   listsrv   - 列出当前系统中符合条件的所有服务及驱动.
  18.   listgrp   - 列出当前系统中所有服务启动组的优先级顺序.
  19.   -h           - 本帮助屏幕.
  20. ===========================================================================
  21. 选项:
  22.   -cmdline     - 当服务启动时,指定你真正想要运行那个程序. 这个选项可以被多次使
  23.                  用,每个都指定一个要运行的应用。当服务启动时,这些应用将被并发
  24.                  地执行。
  25.   -name        - 指定系统服务名(net start 等系统操作用).
  26.   -dispname    - 指定用户将要看到的服务显示名称(在服务管理器中看到的名称).
  27.   -desc        - 指定服务描述(在服务管理器中看到的服务描述信息)
  28.                    默认: 无
  29.   -type        - 指定服务类型,可以是以下几种:
  30.                    FileSystemDriver  : 文件系统及驱动,将在内核载入之前被装入,注
  31.                                        意这个级别的服务几乎不可以使用任何系统API。
  32.                    KernelDriver      : 内核级驱动,内核装入后,立即被装入,这个
  33.                                        级别的服务只能使用受限的API。
  34.                    OwnProcess        : 单独进程服务,标准服务,在Win32子系统ready
  35.                                        后启动,默认。
  36.                    ShareProcess      : 共享进程服务,即数个服务共享同一进程,很多
  37.                                        依赖svchost的服务都使用这种类型。
  38.                    InteractiveProcess: 交互式服务,服务可以与用户交互,除了这个类
  39.                                        型以外,其它所有类型的服务都不可能有用户可
  40.                                        见的界面。
  41.                  注意: 错误的设置这个选项可能使系统变得不稳定,甚至无法启动!如果
  42.                        不知道自己正在做什么,请不要尝试前两项。
  43.   -starttype   - 服务启动类型,包括:
  44.                    SystemStart : 系统级启动,在kernel初始化后启动。
  45.                    BootStart   : 由系统装载器启动(kernel初始化前)。
  46.                    AutoStart   : 自动启动,Win32子系统初始化完毕后启动,默认。
  47.                    DemandStart : 手动。
  48.                    Disabled    : 禁用。
  49.                  注意: 错误的设置这个选项可能使系统变得不稳定,甚至无法启动!如果
  50.                        不知道自己正在做什么,请不要尝试前两项。
  51.   -errctl      - 指定服务出错时的错误处理策略,可以是:
  52.                    ErrorIgnore   : 忽略错误,不挽救服务,系统继续运行
  53.                    ErrorNormal   : 记录到系统日志,并且弹出一个对话框提示用户,默
  54.                                    认。(默认)
  55.                    ErrorSevere   : 记录日志并弹出提示框,如果当前系统已经运行于了
  56.                                    最后一次正确启动的配置,则忽略该错误,否则自动
  57.                                    重启到最后一次正确配置。
  58.                    ErrorCritical : 同上,但是如果重启到最后一次正确配置还是启动本
  59.                                    服务失败就蓝屏。
  60.                  注意: 错误的设置这个选项可能使系统变得不稳定,甚至无法启动!如果
  61.                        不知道自己正在做什么,请不要尝试后两项。
  62.   -group       - 指定服务属于的启动优先级组,优先级组可以通过 listgrp 按顺序列出。
  63.                    默认: 无
  64.   -depen       - 指定本服务所依赖的服务,在这里指定的服务必须在本服务启动之前正确
  65.                  启动。多个服务之间用 “/”分割。这里要指定系统服务名,而不是用户
  66.                  看到的那个名称。
  67.                    默认: 无
  68.   -user        - 指定用户身份,即本服务使用那个用户帐号运行
  69.                    默认: LocalSystem(本地系统,最高权限),交互式服务必须使用这个
  70.                          帐号。
  71.   -pass        - 指定用户密码
  72.                    默认: 无(LocalSystem)
  73.   -priority    - cmdline 参数指定程序的运行优先级,可以是(这个不用解释了吧):
  74.                    Idle
  75.                    BelowNormal
  76.                    Normal (默认)
  77.                    AboveNormal
  78.                    High
  79.                    RealTime
  80.   -unstoppable - 系统服务管理器将拒绝停止以此选项安装的服务。
  81.   -opcode      - 为 control 命令指定要发送的控制码。控制码 “1”其实相当于命令
  82.                  stop,用于停止服务。除了几个标准的控制码外,大部分控制码所对应的
  83.                  行为由服务自己定义。
  84.   -logfile     - 指定日志文件
  85.                    默认: 不记录日志文件
  86.   -loglevel    - 指定日志记录的详细程度,可以是:
  87.                    DebugOnly (记录所有运行细节)
  88.                    Info
  89.                    Warning
  90.                    Error (默认)
  91.                    FatalError
  92.                    Disabled (关闭对控制台和文件的日志输出)
  93. ===========================================================================
  94. 使用 listsrv 命令时的特殊选项:
  95.   -name        - 指定要列出的服务名通配符
  96.                    默认: *
  97.   -dispname    - 指定要列出的服务显示名称通配符
  98.                    默认: *
  99.   -pid         - 仅列出运行于指定进程的服务
  100.                    默认: 所有进程
  101.   -type        - 仅列出指定类型的服务, 多个服务类型间使用 "/" 分割
  102.                    默认: 所有类型
  103.   -starttype   - 仅列出指定启动类型的服务, 多个类型间使用 "/" 分割
  104.                    默认: 所有类型
  105.   -group       - 进列出位于指定启动组的服务
  106.                    默认: 任意组
  107.   -state       - 仅列出当前状态满足指定值的服务, 可以是:
  108.                    active   : 服务当前处于活动状态(正在启动、运行等)
  109.                    inactive : 服务当前处于非活动状态(已停止)
  110.                    默认     : 任意
  111. ===========================================================================
  112. 例子:
  113.   runassrv add /cmdline:"c:\tools\myapp.exe -arg1 -arg2" /name:"mysrv"
  114.   runassrv add /cmdline:myapp.exe /cmdline:yourapp.exe /name:mysrv
  115.   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"
  116.   runassrv start /name:wuauserv
  117.   runassrv stop /name:wuauserv
  118.   runassrv pause /name:iisadmin
  119.   runassrv control /name:wuauserv /opcode:1
  120.   runassrv listsrv /name:w*
  121.   runassrv listsrv /type:KernelDriver/FileSystemDriver
  122.   runassrv listsrv /starttype:SystemStart/BootStart
  123.   runassrv listsrv /group:pnp_tdi
  124.   runassrv listsrv /pid:1234
  125.   runassrv listgrp
  126. ===========================================================================
  127. 关于命令和参数的分隔符:
  128.   所有参数以 “-” 或 “/” 为前缀;需要赋值得参数以 “:” 或 “=”作为
  129.   赋值运算符,例如:-name="mysrv"; /name:"mysrv"; -name:"mysrv" 等组合都
  130.   是合法的。
复制代码
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
版权:免费软件;作者不承担任何责任。您可以将它用于任何用途,只要不做坏事
≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
联系作者:http://www.cn-dos.net/forum 或 [email]asbai@msn.com[/email]

原文地址:http://www.cn-dos.net/forum/viewthread.php?tid=21426
作者: lxzzr    时间: 2009-7-13 13:29

其实这样子也行,功能没有这个强大,待完善(只在这里加了一个参数:i).....
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. if "%1" == "/?" goto :_help
  4. if "%1" == "-i" goto :_start
  5. echo Unknown parameters ^^!
  6. exit /b
  7. :_start
  8. if not exist %2 (
  9.         echo System can not find the specified file ^^!
  10.         exit /b
  11. )
  12. set "path_name=CMD /K START %~2"
  13. set "wpws=wmic path Win32_Service"
  14. %wpws% where name='System start' delete>nul 2>nul
  15. for /f "usebackq skip=5 tokens=2 delims==;" %%a in (
  16.         `"%wpws% call create Name="System start" DisplayName="System start" PathName="!path_name!" ErrorControl="0" DesktopInteract="-1"^&
  17.           %wpws% where "name='System start'" call startservice"`
  18.         ) do (
  19.         set /a temp_n+=1
  20.         if !temp_n! == 1 (
  21.                 if "%%a" == " 0" (
  22.                         echo Service installed successfully ^^!
  23.                         ) else (
  24.                         echo Service failed to install ^^!
  25.                         exit /b
  26.                 )
  27.         )
  28.         if !temp_n! == 3 (
  29.                 if "%%a" == " 7" (
  30.                         echo Service to start successfully ^^!
  31.                         ) else (
  32.                         echo Service failed to start ^^!
  33.                 )
  34.         )
  35. )
  36. exit /b
  37. :_help
  38. echo.
  39. echo          By:lxzzr         lxzzr@21cn.com
  40. echo.
  41. echo          Usage: Install -i [drive:][path][filename]
  42. echo.
  43. echo.
  44. exit /b
  45. 使用格式:Install -i [drive:][path][filename]
复制代码

[ 本帖最后由 lxzzr 于 2009-7-13 13:33 编辑 ]
作者: swust1    时间: 2009-11-13 02:09     标题: ha

kankan1321231321321231231231321dfgdfgdf
作者: lxzzr    时间: 2009-11-21 19:49     标题: 回复 4楼 的帖子

那你认为什么是“厉害”呢?
作者: 523066680    时间: 2009-12-1 12:10

化繁为简是厉害,只能说归类为厉害一类
看牛顿(好像是……)说的:
把复杂的事情看简单可以发现新定律,把简单的事情看得复杂可以发现新领域

[ 本帖最后由 523066680 于 2009-12-1 12:15 编辑 ]
作者: ebhb    时间: 2010-5-9 13:14

请教一下楼主,能不能在启动前替换usrinit.exe,因为很多机器狗把这个文件替换成病毒程序。
作者: duyang12003    时间: 2015-9-18 14:27

最近一直在的,在看有关窗口句柄关闭的资料,哎,头大




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2