问题描述:
我做的项目程序中有个读写手机卡通讯录的功能窗体a。用了a读写手机卡后,关闭a没关闭程序:这样不能安全删除USB上的u盘。想安全删除U盘必须关闭整个程序,这个情况让我们的客户非常不满,说用你们的某某功能竟然连U盘都不能安全拔出了,不行了。问题就出来了,如何解除程序与USB关联性,注意是要在不关闭主程序的前提下。
知道肯定可以实现的,有个unlocker(牛逼程序呀:就可以实现,能够找出U盘正被那些程序锁定并解锁),我水平太菜,看了他介绍的原理分析,晕呼呼的,不懂哎。请各位大侠帮忙,请能搞定,感谢至极,并且送1000分!!!
我做的项目程序中有个读写手机卡通讯录的功能窗体a。用了a读写手机卡后,关闭a没关闭程序:这样不能安全删除USB上的u盘。想安全删除U盘必须关闭整个程序,这个情况让我们的客户非常不满,说用你们的某某功能竟然连U盘都不能安全拔出了,不行了。问题就出来了,如何解除程序与USB关联性,注意是要在不关闭主程序的前提下。
知道肯定可以实现的,有个unlocker(牛逼程序呀:就可以实现,能够找出U盘正被那些程序锁定并解锁),我水平太菜,看了他介绍的原理分析,晕呼呼的,不懂哎。请各位大侠帮忙,请能搞定,感谢至极,并且送1000分!!!
第三方组件? 是的,USB设备商提供的dll引用来读写操作usb盘的。
问题就是如何将其关联的句柄都关闭?详细点。我这里需要的就是与本程序关联的移动盘句柄都关闭
既然有操作读写的 那么就应该有关闭的吧
还有,按道理,我是这个主程序中的一个窗体去读写的,应该是这个窗体和USB关联,关闭整个窗体就自动把这些资源自动清理了,但实际没有,是这整个程序和USB关联,要让USB安全拔出,必须关闭整个程序
1,在封装USB访问的类实现IDispose接口,释放非托管资源。
2,调用GC函数,强制垃圾回收一下。
3,把USB访问类做到外部EXE,通过Process来执行,通过临时文件传递通信录数据。
private extern static Boolean CloseHandle(IntPtr handle); // Use C# destructor syntax for finalization code.
// This destructor will run only if the Dispose method
// does not get called.
// It gives your base class the opportunity to finalize.
// Do not provide destructors in types derived from this class.
~Record()
{
// Do not re-create Dispose clean-up code here.
// Calling Dispose(false) is optimal in terms of
// readability and maintainability.
Dispose(false);
}
对于非托管资源。最好用其自身的析构并且 GC.SuppressFinalize(this)
如何得到我正在插入这个U盘的句柄?
我在关闭窗体前 先关闭U盘的句柄,这样怎么样呢??
可能是因为DLL被程序加载了,而Dll关联了USB,导致USB无法安全拨出。释放Dll?