关于WIN NT服务程序:不能在服务程序中进行读写文件吗?高手请进!
我写了段在NT下运行的服务程序,/install后在windows的服务程序列表里无法正常“启动”,说是“服务程序内部的错误”。
由于我的服务程序是要从一个配置文件中读配置信息进行初始化设置,读文件的部分很简单,没有错误,但是放在服务程序中就是无法正常运行。经过调试发现,如果做成一般的应用程序则可以正常运行。或者我把读文件的部分去掉,把配置信息直接在程序中赋给相应变量,服务程序即可正常运行。但是这样一来,程序就做死了,如果要修改配置,必须重新修改程序源代码并且重新编译才行。而我应用又是需要经常变动配置信息的。不知这儿谁有编写过服务程序的经验的,或者看到过类似情况的,望不吝赐教!十万火急!
问题点数:50、回复次数:6Top
1 楼windfantasy(风之幻想)回复于 2002-09-10 19:16:35 得分 0
难道说服务程序中不能对外部文件进行读写吗?应该没这么限制死吧?
还是有特殊的方法?或者是别的什么原因?
有做服务程序的人吗?帮帮我吧!Top
2 楼hzb(Explorer)回复于 2002-09-10 19:18:06 得分 20
检查一下你读配置文件的代码。在服务程序中,要获取服务程序的路径不能用通常的paramstr、getcurrentdir等方法,这样的得到的是system路径。要读取当前路径,用下面的函数:
FUNCTION GetCurrentDirEx(): ansistring;
VAR
ModuleFileName : ARRAY[0..MAX_PATH] OF Char;
BEGIN
GetModuleFileName(HInstance, @ModuleFileName[0], MAX_PATH);
//取得当前文件名
result := IncludeTrailingBackslash(ExtractFilePath (ModuleFileName)) ;
END;
也许你的情况不同,如果不行的话,把读文件的代码贴出来看看。Top
3 楼windfantasy(风之幻想)回复于 2002-09-10 19:57:11 得分 0
果然是路径的问题,多谢楼上的!真是帮了我大忙了。
不过没有你那么复杂,只要把配置文件的绝对路径写进程序就行了。
但是写绝对路径总是不太好,万一配置文件移到别处了程序就无法正常运行了。
不知服务程序注册到WINDOWS之后其工作路径是什么地方啊?
应该在注册表里吧,但是在什么地方呢?
有人知道吗?Top
4 楼hzb(Explorer)回复于 2002-09-10 20:16:14 得分 30
你在哪里注册的,工作路径就是哪里,不在注册表。所以一般都是把配置文件放在执行文件所在目录,然后获取执行文件目录来读配置文件。Top
5 楼windfantasy(风之幻想)回复于 2002-09-11 11:18:04 得分 0
注册其实很简单啊,只要运行程序的时候加上/install参数就可以了,它会自动安装注册到WIN NT的服务列表中去。但是我不知道注册好之后是怎么一个运行机制,毕竟我是第一次接触服务程序。
我在服务程序列表中查看属性,显示程序路径还是我原来放程序的路径啊,但是他的工作路径应该不是原来的路径了,否则我的配置文件是放在同一个目录下的,为什么会找不到配置文件呢?是不是WINDOWS为服务程序专门指定了一个工作路径呢?
还有,你上面提供的那段程序代码我也没看懂,GetCurrentDirEx好象没有用到吗?Top
6 楼windfantasy(风之幻想)回复于 2002-09-11 19:03:52 得分 0
怎么没人来回答了?
算了,我已经找到解决方法了。
结分吧!Top




