我有一個作爲Windows服務運行的應用程序,它想要讀取由相對路徑指定的文件。由於服務is running under C:\Windows\system32(在Server 2003和Windows 7上),我想它應該從那裏讀取文件。但是,文件讀取總是失敗。Windows服務是否限制從%WINDIR%(C: Windows)讀取?
我把一些簡單的測試代碼放在一起,嘗試使用絕對路徑打開文件進行讀取。雖然服務成功的文件,如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);
}
@ Haw-Bin:粘貼失敗代碼的相關部分。 2意味着某些路徑錯誤('ERROR_FILE_NOT_FOUND':找不到文件)。 – 0xC0000022L 2011-03-10 16:55:37
哇!剛剛偶然發現了微軟關於「文件系統重定向」的文章,至少可以解釋這個問題。 http://msdn.microsoft.com/en-us/library/aa384187(v=VS.85).aspx – 2011-03-10 16:57:09
@ Haw-Bin:不,它不。在正常情況下,服務流程不會受到FS虛擬化的限制。 – 0xC0000022L 2011-03-10 17:00:21