System.Threading.Mutex问题,,高手进来 ~~~~~~~~~~~~~~~

taoyi 2005-09-07 02:22:00

一个类存在于一个DLL中,该类中使用了静态Mutex类成员,声明如下:
class XX
{
private static Mutex mut = new Mutex(false, "_____xxx");
XX(){}
~XX(){}
}

有两个进程需要使用该类,但在一个进程里使用一切正常,但当第一个进程已经使用时,即该MUTEX对象已经在系统中存在时,再打开第二个进程,这时就在上面的实例化MUTEX对象的语句:

private static Mutex mut = new Mutex(false, "_____xxx");

出现System.ApplicationException异常,异常信息为"拒绝访问"

请问怎么解决???为什么??????
...全文
244 点赞 收藏 7
写回复
7 条回复
luckduck 2005年10月19日
这两篇文章更详细地描述了跨进程访问共享内存的权限问题,但没有实现.net下的代码:
http://blog.csdn.net/jiangsheng/archive/2004/06/24/25563.aspx
http://www.cnblogs.com/flier/archive/2004/07/15/24299.aspx
回复 点赞
luckduck 2005年10月19日
Mutex当然可以多次创建(或者说获得)同一个,因为它本来就是用于进程或线程间通信的。
出现这个问题的原因我估计是由于两个进程分别由不同的操作系统用户启动引起的,改成同一操作系统用户启动就可以解决,好象Mutex只能由和创建者属于同一操作系统用户的进程或线程访问(原因不只道,没找到文档),看看“Dxh_Asp_Net”的http://community.csdn.net/Expert/topic/4226/4226346.xml?temp=2.685183E-02,同样问题
回复 点赞
taoyi 2005年09月07日
而且按照.NET中MUTEX类的描述,,即使该MUTEX已经在系统中存在,new Mutex也应该返回同名MUTEX的句柄啊,,况且在同一个进程中运行也一切正常~

为何第二个进程运行就不行了呢??????
回复 点赞
taoyi 2005年09月07日
to weisunding(鼎鼎) , 按照SDK中的CreateMutex描述,即便该MUTEX已经存在,但再次调用CreateMutex时,应该返回的是前一次已经创建的Mutex的句柄,,,,,,

可这里是出现"访问拒绝"的异常啊???而且是.NET这个破东西,,都不知道如何解决???极度郁闷~~~
回复 点赞
taoyi 2005年09月07日
再补充一下,在同一个进程里无论对该类实例化多少次,即调用多少次new Mutex都不会出错;

但当第一个进程已经New Mutex后,即该MUTEX已经在系统中存在后,第二个进程再实例化该类,即new mutex,这时就会出现"拒绝访问"的异常.......

为什么?????偶郁闷死了......
回复 点赞
TechEye 2005年09月07日
当然会出现异常,Mutex是内核对象(应该和C++的差不多),一个系统只有一个单一对象,要不怎么叫Mutex.

你可以改用
private static Mutex mut = new Mutex(false, Guid.NewGuid().ToString());

生成一个不同名字的
回复 点赞
JasonHeung 2005年09月07日
关注。
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告