首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LocalSystem服务问题- Windows帐户无法读取文件

LocalSystem服务问题- Windows帐户无法读取文件
EN

Stack Overflow用户
提问于 2009-09-18 13:22:02
回答 2查看 2.8K关注 0票数 3

我已经创建了一个Windows服务来打开IIS日志,阅读内容,然后通过电子邮件将此内容发送给顾问,告诉他们'The Man‘不想访问这些服务器。在我的本地机器上,一切工作正常,解析当天的IIS日志生成的文件将通过电子邮件发送给收件人。

我没有权限在开发系统上安装我的服务。我让管理员安装了该服务。该服务具有LocalSystem权限。当服务运行时,我在应用程序日志中收到以下消息:

C:\WINDOWS\system32\LogFiles\W3SVC1\ex090918.log :LogExtractor函数- GetIISLog不存在。

管理员已确认路径正确,并且该文件确实存在。(我的用户帐户没有访问W3SVC1目录的权限。)我的理解是系统帐户就是超级帐户,可以做它想做的事情,所以我不知道为什么它不能读取文件。我假设这是权限问题,因为文件确实存在。

以下是相关代码。我已经截取了有关读取文件的部分中涉及的逻辑。代码可以工作,因为它在一个系统上运行成功,但在另一个系统上运行不成功,所以我知道路径是正确生成的。有什么想法吗?

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-09-25 19:46:04

我发现了问题所在。IIS已配置为记录到数据库,因此我要查找的文件不存在。不幸的是,我既不能访问W3SVC1文件夹,也不能访问IIS,所以我从来不知道这一点。我想当我问管理员这个问题"Is ex090920.log the corrrect format?“时,我应该问这个文件是否存在。

好吧,至少它已经解决了,(希望)不会因为所有的头部撞击而造成永久性的损害。

谢谢你的建议,Stephen和ongle。

票数 0
EN

Stack Overflow用户

发布于 2009-09-18 15:28:57

如果服务器运行的是64位操作系统,则最可能的原因是您的两个进程IIS和日志处理服务正在以不同的位数运行。

在64位机器上,文件系统重定向导致访问system32的32位进程实际访问SysWOW64。因此,如果您的一个进程作为64位进程运行,另一个作为32位进程运行,那么当它们读取或写入system32时,实际上将访问两个不同的位置。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1444515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档