2 votes

Visual Basic ne voit pas application.evtx

J'ai un problème avec le fichier "Application.evtx". Chaque fois que j'exécute mon script, j'obtiens une boîte de message avec l'information "File not found" et je ne sais pas pourquoi. J'ai lancé Visual Studio en tant qu'administrateur. Aidez-moi à résoudre ce problème, s'il vous plaît.

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

1voto

Joel Coehoorn Points 190579

Ne pas utiliser File.Exists() . Jamais.

Il y a nombreux Il y a plusieurs raisons à cela, mais celle qui vous concerne le plus est qu'il vous ment et vous dit que le fichier n'existe pas, même si le fichier est en fait un fait existent et le vrai problème est que vous n'avez pas l'autorisation de les utiliser. D'après les documents :

Valeur de retour
Type : System.Boolean
vrai si l'appelant dispose des autorisations nécessaires et que le chemin contient le nom d'un fichier existant ; sinon, faux

N'oubliez pas que les utilisateurs normaux disposent d'autorisations extrêmement limitées sur le système de fichiers en dehors de leurs propres dossiers personnels, et que même les utilisateurs administrateurs doivent explicitement lancer un processus en tant qu'utilisateur élevé, faute de quoi l'UAC se contentera de leur accorder les autorisations d'un utilisateur normal.

Vous devez de toute façon gérer l'exception si la lecture du fichier échoue. Concentrez vos efforts de développement sur le gestionnaire d'exception.

Pendant que je suis ici, vous pouvez aussi construire votre chemin comme suit :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X