Ответ VitalyB не охватывает удаление устройства. Я немного изменил его, чтобы вызвать событие, когда в носителе вставлено и удалено, а также код, чтобы получить букву диска вставленного носителя.
using System;
using System.Management;
namespace MonitorDrives
{
class Program
{
public enum EventType
{
Inserted = 2,
Removed = 3
}
static void Main(string[] args)
{
ManagementEventWatcher watcher = new ManagementEventWatcher();
WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2 or EventType = 3");
watcher.EventArrived += (s, e) =>
{
string driveName = e.NewEvent.Properties["DriveName"].Value.ToString();
EventType eventType = (EventType)(Convert.ToInt16(e.NewEvent.Properties["EventType"].Value));
string eventName = Enum.GetName(typeof(EventType), eventType);
Console.WriteLine("{0}: {1} {2}", DateTime.Now, driveName, eventName);
};
watcher.Query = query;
watcher.Start();
Console.ReadKey();
}
}
}
Хороший вопрос о службе отлова это событие. Моя первая мысль заключается в том, что вы должны пометить свою службу как «разрешить взаимодействие с рабочим столом», а затем создать скрытое окно. Более безопасный вариант, вероятно, для создания приложения Windows, которое запускается при запуске - он может создать окно, а затем связаться с svc –
. Связанный: http: // stackoverflow.com/questions/6003822/how-to-detect-a-usb-drive-has-was-заглушен – DuckMaestro