Windows 서비스 문제 - LocalSystem 계정은 파일을 읽을 수 없습니다

StackOverflow https://stackoverflow.com/questions/1444515

  •  22-07-2019
  •  | 
  •  

문제

IIS 로그를 열고 콘텐츠를 읽은 다음 'The Man'이 해당 서버에 액세스하고 싶지 않다는 컨설턴트 에게이 컨텐츠를 이메일로 보내기위한 Windows 서비스를 만들었습니다. 내 로컬 컴퓨터에서는 모든 것이 훌륭하게 작동하며 하루 동안 IIS 로그를 구문 분석하여 생성 된 파일은 수신자에게 이메일을 보냅니다.

개발 시스템에 서비스를 설치하는 데 액세스 할 수 없습니다. 관리자가 서비스를 설치하도록했습니다. 이 서비스에는 로컬 시스템 권한이 있습니다. 서비스가 실행되면 응용 프로그램 로그 에서이 메시지를받습니다.

logextractor : getiislog function -c : wind

관리자는 경로가 정확하고 파일이 존재한다는 것을 확인했습니다. (내 사용자 계정은 W3SVC1 디렉토리에 액세스 할 수 없습니다.) 시스템 계정이 Uber-Account이고 원하는 것을 거의 할 수 있다는 것은 저의 이해였습니다. 파일. 파일이 존재하기 때문에 권한 문제라고 가정합니다.

다음은 관련 코드입니다. 파일 읽기에 관한 섹션에 관련된 논리를 ed습니다. 코드는 한 시스템에서 성공적으로 실행되지만 다른 시스템은 그렇지 않으므로 코드가 작동하므로 경로가 올바르게 생성되고 있음을 알고 있습니다. 어떤 아이디어?

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입니다.

글쎄, 적어도 그것은 모든 헤드 뱅킹으로 인해 영구적 인 손상이 없어서 해결되었습니다.

귀하의 제안에 감사드립니다 Stephen과 Ongle.

다른 팁

서버가 64 비트 OS를 실행하는 경우 가장 큰 이유는 IIS와 로그 처리 서비스라는 두 프로세스가 다른 비트로 실행되고 있기 때문입니다.

64 비트 머신 파일 시스템에서 리디렉션은 System32에 액세스하는 32 비트 프로세스가 실제로 SYSWOW64에 액세스합니다. 따라서 프로세스 중 하나가 64 비트 프로세스로 실행되고 다른 하나는 32 비트 프로세스로 실행되면 System32에서 읽거나 쓸 때 실제로 두 개의 다른 위치에 액세스 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top