我已經創建了一個Windows服務來打開IIS日誌,閱讀內容,然後通過電子郵件將此內容發送給「The Man」不願意訪問這些內容的顧問服務器。在我的本地機器上,一切正常,並且通過解析當天的IIS日誌生成的文件通過電子郵件發送給收件人。Windows服務問題 - LocalSystem帳戶無法讀取文件
我無權在開發系統上安裝我的服務。我讓管理員安裝服務。該服務具有LocalSystem權限。當服務運行時,我在應用程序日誌中收到此消息:
LogExtractor:GetIISLog函數 - C:\ WINDOWS \ system32 \ LogFiles \ W3SVC1 \ ex090918.log不存在。
管理員已確認路徑是否正確,並且文件確實存在。 (我的用戶帳戶無權訪問W3SVC1目錄。)我的理解是,系統帳戶是超級帳戶,並且可以做到它想要的東西,所以我不知道它爲什麼無法閱讀文件。我假設這是一個權限問題,因爲這些文件確實存在。
這裏是相關的代碼。我已經縮減了關於閱讀文件的章節中涉及的邏輯。代碼工作,因爲它在一個系統上成功運行,但不是另一個,所以我知道路徑正在正確生成。有任何想法嗎?
Private Sub GetIISLog(ByVal LastRetrievedDate As DateTime)
'Build the file path to store the IIS event log before sending it off (previous code snipped)
Dim FileDate As String = "ex" & Date.Now.Year.ToString.Substring(2, 2) & Month & Day & ".log"
Dim FileName As String = "C:\WINDOWS\system32\LogFiles\W3SVC1\" & FileDate
'If the file doesn't exist, exit
If Not File.Exists(FileName) Then
LogIssues("LogExtractor: GetIISLog function - " & FileName & " does not exist.", EventLogEntryType.Error)
Exit Sub
End If
Dim s As Stream = Nothing
Try
s = File.Open(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)
Dim strResult As String = String.Empty
Using sr As New StreamReader(s)
Using sw As New StreamWriter(IISLogFile, False)
strResult = sr.ReadLine
While Not strResult Is Nothing
sw.WriteLine(strResult)
'Write the results
strResult = sr.ReadLine
End While
End Using
sr.Close()
End Using
s.Close()
Catch ex As Exception
LogIssues("LogExtractor: Error writing IIS file - " & ex.Message, EventLogEntryType.Error)
Finally
s.Close()
End Try
s = Nothing
End Sub
你確定它是以LocalSystem而不是LocalService運行嗎? – ongle 2009-09-18 13:29:37
我再次檢查並且.NET安裝程序正在使用LocalSystem帳戶。 – Scott 2009-09-18 19:16:19