مشكلة خدمة Windows - حساب LocalSystem لا يمكن قراءة ملف

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

  •  22-07-2019
  •  | 
  •  

سؤال

ولقد خلق خدمة ويندوز لفتح سجل IIS، وقراءة المحتوى، ثم البريد الإلكتروني هذا المحتوى للاستشاريين أن 'الرجل' لا تريد أن يكون لها أي وصول إلى هذه الخوادم. على آلة المحلية، كل شيء يعمل بشكل كبير، والملف الذي تم إنشاؤه من تحليل سجل IIS لهذا اليوم هو المستلمين بالبريد الإلكتروني.

وأنا لم يكن لديك الوصول إلى تثبيت خدمة بلدي على نظام التنمية. كان لي المسؤول تثبيت الخدمة. خدمة أذونات المحلي. عند تشغيل خدمة أتلقى هذه الرسالة في سجل التطبيق:

وLogExtractor: وظيفة GetIISLog - C: \ WINDOWS \ SYSTEM32 \ ملفات أرشفة \ 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 وخدمة معالجة السجل الخاص بك، وتعمل مع bitness مختلفة.

في نظام ملفات الجهاز 64 بت إعادة توجيه يسبب 32 عمليات قليلا الوصول SYSTEM32 للوصول إلى الواقع SysWOW64. حتى إذا كان أحد من العمليات الخاصة بك يعمل بنظام التشغيل كعملية 64 بت والآخر كعملية 32 بت وسوف يكون في الواقع الحصول على موقعين مختلفين عندما القراءة من أو الكتابة إلى SYSTEM32.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top