Я создаю приложение (антивирус), которое ищет файлы в разных папках компьютера. Он содержит базу данных хэшей MD5 (вирусных хэшей), которая используется для сравнения их с имеющимися на компьютере. Я использую фоновый работник для выполнения задачи (процесс сканирования), однако, похоже, что мое программное обеспечение не получает (скорее всего) доступ к различным папкам, таким как папка Windows folder / system32 и т. Д. c. Я системный администратор, я пытался запустить его таким образом, также я изменил манифест приложения с «invoker» на «requireAdministrator», но безуспешно. Другие папки (например, рабочий стол и т. Д. c) работают нормально с кодом ниже:
Код для BackgroundWorker_DoWork:
Dim worker As System.ComponentModel.BackgroundWorker = CType(sender, System.ComponentModel.BackgroundWorker)
Dim folder As String = "" & TextBox1.Text & ""
Try
For Each file As String In My.Computer.FileSystem.GetFiles(folder, FileIO.SearchOption.SearchAllSubDirectories)
Try
Dim scanbox As New TextBox
Dim read As String = My.Computer.FileSystem.ReadAllText(System.AppDomain.CurrentDomain.BaseDirectory & "viruslist.txt")
scanbox.Text = read.ToString
Dim md5 As MD5CryptoServiceProvider = New MD5CryptoServiceProvider
Dim f As FileStream = New FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
f = New FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read, 8192)
md5.ComputeHash(f)
Dim hash As Byte() = md5.Hash
Dim buff As StringBuilder = New StringBuilder
Dim hashByte As Byte
For Each hashByte In hash
buff.Append(String.Format("{0:X2}", hashByte))
Next
If scanbox.Text.Contains(buff.ToString) Then
AddListItem(ListBox1, "" & file & " - Virus")
AddListItem2(ListBox2, "" & file & "")
End If
Catch ex As Exception
End Try
SetLabelText_ThreadSafe(Me.Label1, "" & file & "")
If (BackgroundWorker1.CancellationPending = True) Then
e.Cancel = True
Exit For
End If
SetLabelText_ThreadSafe(Me.Label1, "Scanning: " & file & "")
int = int + 1
SetLabelText_ThreadSafe(Me.Label2, "Number Of Files Scanned: " & int & " Out Of " & filecount & "")
Dim pct As Integer = CInt(int / filecount * 100)
BackgroundWorker1.ReportProgress(pct)
Next file
Catch ex As UnauthorizedAccessException
End Try
Я получаю сообщение об ошибке:
For Each file As String In My.Computer.FileSystem.GetFiles(folder, FileIO.SearchOption.SearchAllSubDirectories)
При отладке ошибка выглядит следующим образом:
Возникло исключение: 'System.ArgumentException' в mscorlib.dll Исключение типа 'System.ArgumentException' произошло в mscorlib.dll, но не было обработано в код пользователя Путь не имеет допустимой формы.
Я использую список, чтобы сначала вывести список файлов, ожидающих сканирования программным обеспечением, и список работает нормально, даже для папки Windows. Проблема в том, что он не проверяет их, что приводит к ошибке «SystemArgumentException».