如何解除程序与USB关联性,急急急!

tcxx2008 2010-01-22 05:32:16
问题描述:
我做的项目程序中有个读写手机卡通讯录的功能窗体a。用了a读写手机卡后,关闭a没关闭程序:这样不能安全删除USB上的u盘。想安全删除U盘必须关闭整个程序,这个情况让我们的客户非常不满,说用你们的某某功能竟然连U盘都不能安全拔出了,不行了。

问题就出来了,如何解除程序与USB关联性,注意是要在不关闭主程序的前提下。
知道肯定可以实现的,有个unlocker(牛逼程序呀:就可以实现,能够找出U盘正被那些程序锁定并解锁),我水平太菜,看了他介绍的原理分析,晕呼呼的,不懂哎。

请各位大侠帮忙,请能搞定,感谢至极,并且送1000分!!!
...全文
227 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
程序一员 2010-01-27
  • 打赏
  • 举报
回复
好问题,顶了。
khjian 2010-01-27
  • 打赏
  • 举报
回复
友情帮顶
tcxx2008 2010-01-27
  • 打赏
  • 举报
回复
技术难点贴,顶起来!!!!!!!!!!!!!!!!!
風云 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 tcxx2008 的回复:]
都关了。而且.net会自动回收资源的吧
[/Quote]
你这种情况肯定不能靠.net自动回收资源的,它现在虽说是自动托管回收资源,但是不是实时的,说不定要到什么时候才执行呢...就跟连接数据库一样,及时断开得自己写代码
saturn4263195 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 tcxx2008 的回复:]
在使用USB的时候是否将其关联的句柄都关闭?

或者说我在使用USB的时候 能够将其句柄取到不??如果能的话,我在关闭的时候判断如果句柄不为空的话就关闭句柄

这样可以不?请高手看看。能给出解答的,请详细点,谢谢
[/Quote]关注,收藏
xujiaoxiang 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 tcxx2008 的回复:]
目前情况是有关闭的函数,已经用过了,对这个没用。
还有,按道理,我是这个主程序中的一个窗体去读写的,应该是这个窗体和USB关联,关闭整个窗体就自动把这些资源自动清理了,但实际没有,是这整个程序和USB关联,要让USB安全拔出,必须关闭整个程序
[/Quote]

可能是因为DLL被程序加载了,而Dll关联了USB,导致USB无法安全拨出。释放Dll?
tcxx2008 2010-01-26
  • 打赏
  • 举报
回复
没人回答了,唉,头大呀
LutzMark 2010-01-25
  • 打赏
  • 举报
回复
[System.Runtime.InteropServices.DllImport("Kernel32")]
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)
yagebu1983 2010-01-25
  • 打赏
  • 举报
回复
硬件API处理
jimh 2010-01-25
  • 打赏
  • 举报
回复
可以从这几个方向考虑
1,在封装USB访问的类实现IDispose接口,释放非托管资源。
2,调用GC函数,强制垃圾回收一下。
3,把USB访问类做到外部EXE,通过Process来执行,通过临时文件传递通信录数据。
zhxingway 2010-01-25
  • 打赏
  • 举报
回复
关注,学习了,谢谢.
Red_angelX 2010-01-25
  • 打赏
  • 举报
回复
我看多半是你没正确调用dll
reejayyang 2010-01-25
  • 打赏
  • 举报
回复
learning 帮顶
段传涛 2010-01-25
  • 打赏
  • 举报
回复
mark learning
tcxx2008 2010-01-25
  • 打赏
  • 举报
回复
目前情况是有关闭的函数,已经用过了,对这个没用。
还有,按道理,我是这个主程序中的一个窗体去读写的,应该是这个窗体和USB关联,关闭整个窗体就自动把这些资源自动清理了,但实际没有,是这整个程序和USB关联,要让USB安全拔出,必须关闭整个程序
michaelnami 2010-01-25
  • 打赏
  • 举报
回复
第三方组件? 是的,USB设备商提供的dll引用来读写操作usb盘的。
既然有操作读写的 那么就应该有关闭的吧
rememberhai 2010-01-25
  • 打赏
  • 举报
回复
友情帮顶。关注
tcxx2008 2010-01-25
  • 打赏
  • 举报
回复
在使用USB的时候是否将其关联的句柄都关闭?

或者说我在使用USB的时候 能够将其句柄取到不??如果能的话,我在关闭的时候判断如果句柄不为空的话就关闭句柄

这样可以不?请高手看看。能给出解答的,请详细点,谢谢
ILOVE_ASPNET 2010-01-25
  • 打赏
  • 举报
回复
学习,, 帮顶。。
tcxx2008 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cuike519 的回复:]
检查是否有句柄泄漏?

在使用USB的时候是否将其关联的句柄都关闭?你是怎么使用USB的,第三方组件?

unlocker会检查和目标相关联的内核资源是否都被释放,比如关联的文件句柄是否关闭?

托管代码在访问这些非托管代码的时候需要使用IDispose接口来释放非托管资源。
[/Quote]

第三方组件? 是的,USB设备商提供的dll引用来读写操作usb盘的。
问题就是如何将其关联的句柄都关闭?详细点。

我这里需要的就是与本程序关联的移动盘句柄都关闭
加载更多回复(9)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧