我正在使用Windows 7上的Visual Studio 2008在C#中编写更新程序 . 我希望用户插入USB拇指驱动器,如果程序在驱动器上找到驱动器和更新,则它会自动复制它们 . 我希望在启动时只检查一次,然后执行一个不知道更新的程序(更新确实需要在程序关闭时发生) .
我的问题是在安装拇指驱动器之前正在运行更新程序,因此计算机检测到没有拇指驱动器且没有更新并且过早地移动 . 我希望尽可能快地运行所有内容,但我需要在检测之前强制安装任何拇指驱动器 . 一切都必须是自动的,没有来自用户的输入 .
这可能在c#中吗?
编辑更详细:
我目前在启动时运行批处理文件(实际上作为Windows 7 shell,但我不确定这会有所不同) . 批处理文件运行更新检查然后执行实际程序 . 如果用户在启动时卡住了USB驱动器,那么我希望更新程序能够查看驱动器并复制任何新文件 .
目前的编码如下:
DriveInfo[] ListDrives = DriveInfo.GetDrives();
foreach (DriveInfo Drive in ListDrives)
{
if(Drive.DriveType == DriveType.Removable)
{
// double check it's valid and copy over stuff
}
}
但它目前在启动时找不到驱动器 . 如果我以后运行它然后一切都很好 . 我假设因为我这么早就运行更新程序它没有机会装载,但我不想等待N秒,如果我没有,因为在正常情况下这只是死时间 .
如果我可以做到这一点,那么从容易起来就比不断监视某个事件然后关闭所有内容并进行更新要简单得多 .
3 回答
我会建议一个类似下面的解决方案:
RemoveableDriveWatcher类如下所示:
要使一切顺利,您需要使用RemovableDriveWatcherEventArgs:
当然还有扩展:
我希望这有点帮助 .
你没有提供太多细节,但似乎你可以调用DriveInfo.GetDrives(),它返回一个DriveInfo []类型的数组
DriveInfo有一个IsReady()方法 . 大概一旦你检查驱动器准备就绪,你可以在USB驱动器()上寻找一个众所周知的文件来验证他们是否安装了正确的USB
您可以循环轮询直到找到所需内容,但如果您在60秒内找不到所需内容,则需要通知用户您找不到所需的USB驱动器 .
我没有在if语句中看到一个现成的检查 . 根据MSDN:
你在检查IOException吗?我没有看到IsReady事件,因此您可能必须通过spinwait或挂钩到较低级别的Windows API来查找指示驱动器就绪的事件 . 这是同时的想法:
我现在没办法测试这个 . 请告诉我它是如何工作的,或者我需要了解更多细节 .
但是,因为你在启动时开始这个过程,所以总是有可能
IsReady
不够,再一次你可能需要找到别的东西(我想象的是Windows API) . 我还没有发现任何说明效果的文档 .