我创建了一个Windows服务来打开IIS日志,阅读内容,然后发送电子邮件内容顾问认为,“人”不希望有这些服务器的任何访问。在我的本地机器,一切都很正常,并从解析IIS日志一天生成的文件通过电子邮件发送给收件人。

我没有进入到开发系统上安装我的服务。我有管理员安装服务。该服务具有本地系统权限。当服务运行时,我在应用程序日志收到此消息:

LogExtractor:GetIISLog功能 - C:\窗口\ 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
有帮助吗?

解决方案 2

我想通了这个问题。 IIS已被配置为登录到数据库中,所以我一直在寻找的文件不存在。不幸的是,我有机会获得既不W3SVC1文件夹也没有IIS,所以我从来不知道。我想,当我问管理员的问题“是ex090920.log的corrrect格式?”,我问的是,如果该文件存在的。

那么,至少它的解决,以(希望),因为所有磁头撞的无永久性的损坏。

感谢您的建议斯蒂芬和ongle。

其他提示

如果服务器运行的是64位操作系统,那么这个最有可能的原因是你的两个过程,IIS和您的日志处理服务,与不同的位数运行。

在64位机器文件系统重定向导致访问SYSTEM32实际访问SysWOW64中32个的进程。因此,如果您的过程中的一个正在作为一个64位的处理,而另一个用作一个32位的过程中,他们将被实际当他们从读取或写入访问SYSTEM32两个不同的位置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top