如何使用C#删除USB驱动器 我正在尝试编写一个应用程序来删除USB驱动器,但我找不到方法。 是否有.NET类可以执行此操作,或者使用Win32 API可以使用?

问题描述 投票:0回答:2

解释如何做,并提供源代码,享受!
c# usb usb-drive
2个回答
6
投票

i具有测试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


1
投票
您可以使用此脚本,请参阅

文档

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); } }


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.