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

Windows 7 是否限制Windows服务从%WINDIR%(C:\Windows)读取?,windows-7,windows-services,Windows 7,Windows Services,我有一个作为Windows服务运行的应用程序,它希望读取由相对路径指定的文件。由于该服务(在Server2003和Windows7上),我认为它应该从那里读取文件。但是,文件读取总是失败 我编写了一些简单的测试代码,试图使用绝对路径打开一个文件进行读取。虽然服务对C:\Temp\foo.txt等文件成功,但对C:\Windows\foo.txt和C:\Windows\system32\foo.txt等文件总是失败GetLastError()返回2 我是否遇到访问问题?我找不到这方面的权威文件。有

我有一个作为Windows服务运行的应用程序,它希望读取由相对路径指定的文件。由于该服务(在Server2003和Windows7上),我认为它应该从那里读取文件。但是,文件读取总是失败

我编写了一些简单的测试代码,试图使用绝对路径打开一个文件进行读取。虽然服务对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);
}
std::ofstreamout;
//...
std::字符串文件名(“C:\\Windows\\system32\\Foo.txt”);
hFile=CreateFile(fileName.c_str(),GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==无效的句柄值){

out错误代码2是
Error\u FILE\u NOT\u FOUND
,因此您给出的路径很可能根本不存在,或者该路径中不存在该文件。如果没有
CreateFile
中的相关标志,则很难给出更好的答案

但通常,在默认条件下,服务将被允许读取该文件夹中的内容


我想到了另一件事。您如何获得路径(
C:\Windows
)?正确的方法是使用API(例如
GetWindowsDirectory
),而不是硬编码。

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

@Haw Bin:粘贴失败代码的相关部分。2表示路径有问题(
错误文件未找到
:文件未找到).哇!刚刚偶然发现了微软关于“文件系统重定向”的文章,这至少可以解释Windows 7的情况!@Haw Bin:不,不是。在正常情况下,服务进程不会受到FS虚拟化的影响。@STATUS\u ACCESS\u DENIED:文章提到在64位Windows上运行32位应用程序,这就是我的Windows 7体验。刚才,我在C:\Windows\SysW下复制了该文件OW64,找到了该文件!但这并不能解释服务器2003的情况,它是32位的。@Haw-Bin:虚拟化功能和WOW64文件系统重定向仍然是两个不同的东西。而且您也没有提到任何关于64位的内容;)…请签出
WOW64 DisableWOW64FSRedirection
然后它在下运行在这两种环境中都是“本地系统帐户”,未选中“允许服务与桌面交互”。谢谢-我只是为了测试而硬编码它,因为我在计算机上检查了
%WINDIR%
的值。