System.Diagnostics.EventLog - устройство, подключенное к системе, не работает

Я сделал несколько гугл, и ни одна из ошибок "устройство подключено" не имеет никакого отношения к Eventlog. Также я опубликовал вопрос в Micosoft fourm, но не получил ответов. Думаю, я бы дал вам, ребята, шанс. Здесь ссылка на вопрос. https://social.msdn.microsoft.com/Forums/en-US/d484d9dc-d9eb-4d19-97b8-9ae4db63e041/systemdiagnosticseventlog-a-device-attached-to-the-system-is-not-functioning?forum=netfxbcl

Вот сообщение об ошибке:

System.ComponentModel.Win32Exception was caught
  ErrorCode=-2147467259
  HResult=-2147467259
  Message=A device attached to the system is not functioning
  NativeErrorCode=31
  Source=System
  StackTrace:
       at System.Diagnostics.EventLogInternal.InternalWriteEvent(UInt32 eventID, UInt16 category, EventLogEntryType type, String[] strings, Byte[] rawData, String currentMachineName)
       at System.Diagnostics.EventLogInternal.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
       at System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type)
       at VB_Braums_ClassLib.LogIt.WriteEventLog(String Entry, EventLogEntryType eventType, String Source) in \\Corp01\Vol1\Mis\Pccode\Ms.net\ProductionLibs\ProductionLibs\ProdLibCommon.vb:line 3666
  InnerException: 

Этот код находится в библиотеке, поэтому я создаю "привет мир", чтобы продемонстрировать проблему. Я опубликую это в конце. Это среда.net 4, и она уже давно используется в нашем коде. Мы начинаем переходить с XP на Win 7. В основном размеры журнала событий ограничены числом 32667. Итак, у нас был тест: если строка больше этой, то мы записали бы ее в 32000 байтовых блоков. На двух разных коробках win7 мы получаем сообщение об ошибке "устройство подключено". Запустите тот же код на коробке XP, и он работает. Да, и коробки Win 7 являются 64-битными. Интересно, победа 7 32 бит будет иметь такую ​​же проблему? Могут ли другие повторить это? Размер tmpsize, кажется, разные числа, но если вы играете с ним, вы можете получить его до числа х работает, а (х +1) нет. Где-то между 30000 и 32000. Начните с самого небольшого значения и двигайтесь вниз, я держу пари в диапазоне 31000 - 31900.

Module Module1
    Sub Main()

        Dim logName As String = "BraumsLog"
        Dim objEventLog As New System.Diagnostics.EventLog()
        Dim needCreate As Boolean = False
        Dim Source As String = ""
        If Source.Length = 0 Then Source = "Test"
        Dim Entry As String = "".PadLeft(64000, "1"c)

        'Register the App as an Event Source
        If EventLog.SourceExists(Source) Then
            Dim slog As String = EventLog.LogNameFromSourceName(Source, ".")
            If slog <> logName Then EventLog.DeleteEventSource(Source) : needCreate = True
        Else
            needCreate = True
        End If

        If needCreate Then EventLog.CreateEventSource(Source, logName)
        objEventLog.Source = Source

        '*************************************
        '*********** New Code ****************
        objEventLog.MaximumKilobytes = 20480
        objEventLog.ModifyOverflowPolicy(OverflowAction.OverwriteAsNeeded, 0)
        '*************************************
        '*************************************

        'WriteEntry is overloaded; this is one
        'of 10 ways to call it
        Dim tmp As String = ""
        Dim tmpSize As Integer = 32000 '31890 works 31891 does not
        Do While Entry.Length > tmpSize
            tmp = Entry.Substring(0, tmpSize - 1)
            objEventLog.WriteEntry(tmp, EventLogEntryType.Information)
            Debug.WriteLine(tmp.Length.ToString)
            Entry = Entry.Substring(tmpSize)
        Loop
        tmp = Entry
        objEventLog.WriteEntry(tmp, EventLogEntryType.Information)
    End Sub

End Module

2 ответа

В настоящее время у нас тоже есть проблема. Я не уверен, что это решение, и официальная информация об этой ошибке относится к дискетам вместо сообщений журнала: https://technet.microsoft.com/en-us/library/cc978749.aspx

Но я обнаружил, что в Log4Net сообщалось об ошибке, что файл журнала может быть поврежден при записи сообщений журнала длиной более 30000 символов. https://issues.apache.org/jira/browse/LOG4NET-360

Теперь мы воссоздадим файлы журналов и обрежем строку перед записью новой записи журнала. Скрестим пальцы, что это помогает (комментарии приветствуются).

Я сделал то же самое, что сказал Десс, и это сработало для меня, когда я уменьшил максимальный размер записи в журнале до 25000 символов.

Более раннее сообщение A device attached to the system is not functioning кажется, вводит в заблуждение.

Другие вопросы по тегам