现在的位置: 首页 > 综合 > 正文

Windows下如何自定义服务?如何定义服务相关性?

2013年09月02日 ⁄ 综合 ⁄ 共 1199字 ⁄ 字号 评论关闭

背景:

使用oracle form 6i 开发的一个系统,后台数据库使用oracle10g,form runtime和10gDB发布在同一台windows2000的机器上,为了方便客户使用,每次客户开机时,自动启动oracle10g 和这个应用程序直接进入系统。

问题:

首次尝试是在startup 里创建一个快捷方式。但是, 我没有料到oracle10g的启动实在是太慢了,以至于oracle form runtime在oracle10g完成启动之前就开始试图连接oracle10g。当然,这是不可能成功的。

解决方法:

使用windows 服务来启动这个form runtime。

我使用了windows resource kit 中的instsrv 和srvany。这个可以很容易的在google上搜到。

1. 把srvany.exe 复制到c:/winnt/system32

2. 运行instsrv为srvany.exe注册一个自定义的服务,如MYSRV

 c:/tmp/instsrv MYSRV c:/winnt/system32/srvany.exe

3.在“服务”里,找到刚刚注册的服务,修改其属性为交互式。这个很重要,否则,form runtime的应用程序将无法显示用户界面。同时,把该服务设置为“自动启动”

4. 打开注册表, HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/MyService, 在这个键下,添加一个键,名称为“Parameters“

5. 在Parameters键下创建一个REG_SZ,命名为Application, Value=<所要启动的程序>, 在我的应用里,是oracle的ifrun60.exe

6. 在Parameters键下创建一个REG_SZ,命名为AppParameters, Value=<上述程序的命令行参数>

7. 在Parameters键下创建一个REG_SZ,命名为AppDirectory, Value=<上述程序的工作目录>,在我的环境下,是Oracle Form 的FMX所在的目录.

8. 由于该程序需要在oracle 10g 启动之后才可以启动,我使用服务的依赖型来实现这个功能。在上述服务的HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/MyService 键下,添加一个REG_MULTI_SZ, 命名为DependOnService, Value=OracleServiceORCL。

至此,所有的设置都已经完成。重启机器, Well, it works.

ps: 原来打算使用“改变windows 服务启动顺序”的方法来实现, 但是, 似乎Microsoft 并不支持自定义Service Group, 并且我也不清楚把oracle service添加到已有的group 会不会由问题。所以就采用了dependancy 来实现。

抱歉!评论已关闭.