Отформатируйте USB-накопитель с помощью команды форматирования - PullRequest
0 голосов
/ 17 октября 2018

Попытка выполнить команду format.com с помощью методов Shell или Process.Start безуспешна, и мне нужны некоторые указания относительно того, где я ошибаюсь.

Примечание. Я поместилкопия format.com в моем локальном рабочем каталоге (C: \ AEL)

Shell("C:\AEL\Format.com " & "G:" & " /q")

В результате возникает ошибка:

System.IO.FileNotFoundException 'произошла вMicrosoft.VisualBasic.dll Дополнительная информация: Файл не найден.

Я пробовал без полного пути с тем же результатом, а также полный путь к каталогу System32.AEL - это собственный локальный рабочий каталог.

Если я использую метод Process.Start

Process.Start("C:\AEL\format.com " & "G:" & " /q") 

, я получаю следующую ошибку:

Система.ComponentModel.Win32Exception 'произошло в System.dll Дополнительная информация: Система не может найти указанный файл

Вытаскивание волос - должно быть что-то простое, я пропускаю

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

После дальнейшего чтения использовали следующее:

Dim FDrive As New ProcessStartInfo
        FDrive.FileName = "format.com"
        FDrive.Arguments = Mid(TDir, 6, 2) & ForQ & Mid(TDir, 9, 4) & "X"
        FDrive.UseShellExecute = False
        FDrive.CreateNoWindow = True
        FDrive.RedirectStandardOutput = True
        FDrive.RedirectStandardInput = True
        Process.Start(FDrive)

Это прекрасно работает, позволяя мне выбирать формат Full или Quick с помощью переменной ForQ.

Все равно хотелось бы понять, почемуметод

process.start("Drivename", "Arguments")

не применим к использованию.Пытался понять различия, основанные на:

https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.process.start?view=netframework-4.7.2

, который описывает использование Start (String, string).

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

Private Sub TimerX_Tick(sender As Object, e As EventArgs) Handles TimerX.Tick
    FProcess = Process.GetProcessesByName("format.com")
    If FProcess.Count > 0 Then : Exit Sub : End If
    TimerX.Stop() : TimerX.Enabled = False
    CreateObject("WScript.Shell").Popup(TDir & " FORMAT COMPLETED", 3, "FORMAT DRIVE REQUEST")
    Can = 0 : ButtonStatus()
End Sub

Есть ли более простой способ контролировать конец процесса форматирования, который я мог бы использовать?

0 голосов
/ 17 октября 2018

должно быть что-то простое, что мне не хватает

Да, есть.ДокументацияЕсли вы пытаетесь использовать тип или член, и он не работает, первое, что вы должны сделать, это прочитать документацию для этого типа или члена.Microsoft не потратила сотни или, возможно, тысячи человеко-часов на то, чтобы написать документацию даром.

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

Process.Start("C:\AEL\format.com", "G: /q")

Вы заметите, что я также воздержался от объединения двух букв Strings там два, что глупо.

...