2016-07-18 3 views
2

У меня проблема с файлом «Application.evtx». Каждый раз, когда я запускаю свой сценарий, я получаю сообщение с информацией «Файл не найден», и я не знаю, почему. Я запускал Visual Studio в качестве администратора. Помогите мне с этим, пожалуйста.Visual Basic не вижу application.evtx

Imports System.IO 

Module Module1 
    Sub Main() 
     Dim pathReadFile As String = "c:\Windows\System32\winevt\Logs\Application.evtx" 
     'Dim pathReadFile As String = "%windir%\Sysnative\winevt\Logs\Application.evtx" 
     'Dim pathReadFile As String = "D:\Dokumenty\MyTest.txt" 

     Try 
      If File.Exists(pathReadFile) Then 
       MsgBox("File found.") 
      Else 
       MsgBox("File not found.") 
      End If 
     Catch ex As Exception 

     End Try 
    End Sub 
End Module 

ответ

1

Не использовать File.Exists(). Когда-либо.

Есть много причин для этого, но тот, который влияет на вас прямо сейчас, что он лежит к вам и говорит вам файл не существует, даже если файл на самом деле делает существует и реальная проблема что у вас нет разрешений на его использование. From the docs:

Возвращаемое значение
Тип: System.Boolean
верно если вызывающий необходимые разрешения и путь содержит имя существующего файла; в противном случае, ложных

Помните, что обычные пользователи имеют разрешения крайне ограниченные файловую системы за пределами своих собственных домашних папок, и даже пользователям администратора нужны явно запустить процесс, как возвышенные или UAC будет просто дать им нормальные права доступа пользователей.

Вы должны обрабатывать исключение в любом случае, если чтение файла не выполняется. Поместите свои усилия по разработке в обработчик исключений.

Пока я здесь, вы также можете построить свой путь:

Dim pathReadFile As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "winevt\Logs\Application.evtx") 
+2

Если он работает 32-разрядные приложения на 64-битной системе он также может возникнуть проблема, что 'System32 'перенаправляется на' SysWOW64'. Для этого вместо этого нужно использовать 'Sysnative'. –

+0

Могу ли я заставить систему предоставить разрешение для моего скрипта? Как заменить File.Exists()? – Brath

+0

@Brath. Вы должны работать как пользователь, имеющий права доступа к файлам, и вам нужно получить повышение. Для File.Exists() ... вам это действительно не нужно. _Просто попробуйте открыть файл_, независимо от того, существует он или нет, и обрабатывать исключение при неудаче. Так же плохо, как и исключения, файловый ввод-вывод намного хуже. –