为什么系统服务中无法打开外部文件??

databasesql 2004-04-05 08:14:10
void CServiceModule::Run()
{
.
.
.
.

// 打开文件
HANDLE hFile;

hFile = CreateFile("DLESet.ini",
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

.
.
.
.
}

我用ATL向导生成服务程序,在Run()里面加入了上面的打开文件代码,如果在VC中调试运行没有问题可以打开文件。但注册到服务后(/Service),在"计算机管理"中启动服务就打不开文件,返回的错误代码是2“系统找不到指定的文件”。我把“DLESet.ini”copy到WINNT\SYSTEM32目录下就没有问题了。
不知道这是什么原因,还请大侠指点!
...全文
135 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
databasesql 2004-04-19
  • 打赏
  • 举报
回复
flybird926(我心飞翔) :我试过用绝对路径(也就是把路径写全),按道理说这样是可以的吧,但还是没有办法打开文件,唯一可以打开文件的一次就是把路径写成“C:\Winnt\system32\LEDSet.ini”你说这会是什么原因呢?
bager 2004-04-09
  • 打赏
  • 举报
回复
这个问题是挺奇怪,关注。

一点建议:
像文件名这样的输入信息最好以全路径名的形式保存在注册表或其它配置文件中。
flybird926 2004-04-09
  • 打赏
  • 举报
回复
其实很简单,在服务中默认路径是system32目录,用_chdir改变当前路径,好好想一想就会明白的。服务管理器其实也是一个程序,你的程序是通过他来运行和终止,当然不会去你的路径
databasesql 2004-04-07
  • 打赏
  • 举报
回复
???难道没有人遇到过这样的问题吗?
databasesql 2004-04-06
  • 打赏
  • 举报
回复
这个方法我试过,好象是不行的。如果真的这么简单我就不问了!
zjg751206 2004-04-05
  • 打赏
  • 举报
回复
为了简单建议写绝对路径。比如
c:\\WINNT\SYSTEM32\\DLESet.ini.或者创建一个目录
createdirectory(c:\\programm files\\myfiles\\,NULL);

programm files下面,然后就写
c:\\programm files\\myfiles\\DLESet.ini
zjg751206 2004-04-05
  • 打赏
  • 举报
回复
当然了,路径不写清楚。系统怎么知道文件在那个目录。和动态连接库一样。先去找系统目录,和可执行文件目录。所以你这个服务要好好工作最好能将目录作为参数保存起来。或者以后安装时就放到系统的目录中。他会自己去找那个路径。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧