我有一个作为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);
}
答案 0 :(得分:0)
错误代码2是ERROR_FILE_NOT_FOUND
因此,您提供的路径不存在或该路径中不存在该文件的可能性更大。如果没有来自CreateFile
的相关标志,很难给出更好的答案。
但一般情况下 - 在默认情况下 - 允许服务在该文件夹中读取。
还有一件事想到了。你如何获得路径(在你的情况下C:\Windows
)?正确的方法是使用API(例如GetWindowsDirectory
),而不是硬编码。
答案 1 :(得分:0)
尝试从本地系统帐户运行Windows服务。默认情况下,该服务可能正在从“网络服务”帐户运行。 要更改设置,请打开Windows服务管理器(运行 - > services.msc),然后双击您的服务。在属性窗口中,选择第二个选项卡“登录”并将其更改为使用本地系统帐户运行。