【问题标题】:Get notification when a new drive is connected via USB or other means (C#)通过 USB 或其他方式连接新驱动器时获取通知 (C#)
【发布时间】:2010-12-19 12:17:39
【问题描述】:

我需要检测新驱动器何时通过 USB 端口、火线端口等插入 Windows 系统。我知道 WM_DEVICECHANGE 消息,但这需要打开一个窗口才能使用它.有没有办法在 C# 中创建一个 background 进程来检测何时插入新驱动器?

背景信息:我想编写此应用程序以从公司可移动驱动器中删除蠕虫。常规的防病毒软件无法将其删除。我们有一个脚本可以删除蠕虫,但必须手动运行,这不足以控制疫情。

【问题讨论】:

    标签: c# antivirus usb-drive removable-storage


    【解决方案1】:

    windows service 应该可以解决问题

    尝试将 CodeProject DriveDetector 重新设计为服务,您应该拥有所需的东西

    【讨论】:

    • 成功了。对于服务,我只需要确保创建了另一个线程,该线程具有无限循环,不断调用 Application.DoEvents()。如果您不这样做,DriveDetector 将挂起并且无法接收 WM_DEVICECHANGE 消息。此外,我必须确保为该服务启用桌面交互,因为 DriveDetector 使用隐藏表单来完成其工作。
    • 回顾这个项目,我意识到允许桌面与服务交互并不是一个好习惯。现在我建议创建一个常规的可执行文件并将其放到启动文件夹中。
    【解决方案2】:

    这篇博文展示了如何处理系统事件,https://web.archive.org/web/1/http://blogs.techrepublic%2ecom%2ecom/howdoi/?p=135也许你可以用它来处理你想要处理的事件

    【讨论】:

    • 很遗憾,没有看到任何与设备更改相关的系统事件。
    【解决方案3】:

    您需要订阅RegisterDeviceNotification,并将其绑定到服务状态句柄。另见http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/9ae4478a-1133-44ba-8a1c-3e4be3856e37

    我不太清楚如何实现这个,已经很久了。

    【讨论】:

      【解决方案4】:

      您可以创建隐藏窗口或运行服务,因为它应该与窗口句柄或服务状态句柄一起使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多