Я пытаюсь написать приложение для удаления USB-накопителей, но не могу найти способ это сделать. Для этого есть класс .NET или можно использовать Win32 API? Все советы приветствуются, спасибо за помощь.
Как удалить USB-накопитель с помощью C #
Ответы (2)
Вот ссылка на то, что вы ищете:
Извлечение USB-дисков с помощью C #
Объясняет, как это сделать, и поставляется с исходным кодом, наслаждайтесь!
person
David Menard
schedule
28.07.2009
Загрузка в связанной статье больше не доступна, поэтому этот ответ больше бесполезен.
- person ygoe; 09.01.2016
У меня есть тестовые 2 варианта, WMI и Shell, а вариант Shell работает по желанию
Оболочка
/// <summary>
/// Eject USB Drice
/// STA Thread is required
/// </summary>
/// <remarks>
/// Install Shell32
/// 1. Right click project
/// 2. Click Add reference
/// 3. Click .COM tab in Add reference dialogue
/// 4. Select Microsoft Shell Controls and Automation
/// 5. Click OK
/// </remarks>
/// <param name="driveName">eg. D:</param>
private static void EjectDrive(string driveName)
{
var staThread = new Thread(new ParameterizedThreadStart(EjectDriveShell));
staThread.SetApartmentState(ApartmentState.STA);
staThread.Start(driveName);
staThread.Join();
}
private static void EjectDriveShell(object param)
{
var driveName = param.ToString();
var shell = new Shell();
shell.NameSpace(17).ParseName(driveName).InvokeVerb("Eject");
}
WMI
Вы можете использовать этот сценарий, см. документация
private static void EjectDrice(string driveLetter)
{
var scope = new ManagementScope(@"\\localhost\root\CIMV2", null);
scope.Connect();
var wql = $"SELECT * FROM Win32_Volume WHERE Name LIKE '{driveLetter}%'";
var objectQuery = new ObjectQuery(wql);
using var objectSearcher = new ManagementObjectSearcher(scope, objectQuery);
foreach (ManagementObject classInstance in objectSearcher.Get())
{
using ManagementBaseObject inParams = classInstance.GetMethodParameters("Dismount");
inParams["Force"] = false;
inParams["Permanent"] = false;
using ManagementBaseObject outParams = classInstance.InvokeMethod("Dismount", inParams, null);
}
}
person
live2
schedule
15.02.2021