Windows服务是否受限于从%WINDIR%(C:\ Windows)读取?

时间:2011-03-10 16:48:02

标签: windows-7 windows-services

我有一个作为Windows服务运行的应用程序想要读取由相对路径指定的文件。自服务is running under C:\Windows\system32(在Server 2003和Windows 7上),我认为它应该从那里读取文件。但是,读取的文件总是失败。

我整理了一些简单的测试代码,尝试使用绝对路径打开文件进行读取。虽然 C:\ Temp \ foo.txt 等文件的服务成功,但对于 C:\ Windows \ foo.txt C等文件总是失败:\ Windows \ system32 \ foo.txt GetLastError()会返回2

我遇到了访问问题吗?我找不到关于此的权威文档。有没有解决方法?

更新

文件测试代码是通用的,直截了当的:

std::ofstream out;
//...

std::string fileName("C:\\Windows\\system32\\Foo.txt");

hFile = CreateFile(fileName.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if (hFile == INVALID_HANDLE_VALUE) {
  out << "Could not create file handle! (" << GetLastError() << ")" << std::endl;
}
else {
  out << "Successfully opened file!" << std::endl;
  CloseHandle(hFile);
}

2 个答案:

答案 0 :(得分:0)

错误代码2是ERROR_FILE_NOT_FOUND因此,您提供的路径不存在或该路径中不存在该文件的可能性更大。如果没有来自CreateFile的相关标志,很难给出更好的答案。

但一般情况下 - 在默认情况下 - 允许服务在该文件夹中读取。

还有一件事想到了。你如何获得路径(在你的情况下C:\Windows)?正确的方法是使用API​​(例如GetWindowsDirectory),而不是硬编码。

答案 1 :(得分:0)

尝试从本地系统帐户运行Windows服务。默认情况下,该服务可能正在从“网络服务”帐户运行。 要更改设置,请打开Windows服务管理器(运行 - > services.msc),然后双击您的服务。在属性窗口中,选择第二个选项卡“登录”并将其更改为使用本地系统帐户运行。