我有2个进程在运行。两者都使用代码
创建一个命名的互斥锁Mutex mut = new Mutex(false, "ABC");
然后,进程使用mut.WaitOne()
和mut.ReleaseMutex()
来访问共享数据库文件,在不同方法中多次访问。
此代码在XP上运行没有任何问题。
在Vista上,我只是尝试运行一个进程(进程1)并使用相同的代码创建互斥锁。
在行mut.WaitOne()
上,进程1永久进入休眠状态。
请注意,到目前为止我还没有开始过程2。
mut.WaitOne()
。
methodX在另一个方法(methodY)的循环中调用。
methodX的结构是
try
{
mut.WaitOne();
//do work on the db file
}
catch
{
}
finally
{
try
{
mut.ReleaseMutex();
}
catch
{
}
}
methodY和methodX也在BackgroundWorker中工作。虽然在主应用程序中调用了初始化互斥锁的代码。 但是,主应用程序从不拥有互斥锁。
修改
以下是代码:
string mutexName = @"Global\OneComClientDb";
bool mutexWasCreated;
MutexSecurity mSec = new MutexSecurity();
MutexAccessRule rule = new MutexAccessRule(
new SecurityIdentifier(WellKnownSidType.WorldSid, null),
MutexRights.FullControl,
AccessControlType.Allow);
mSec.AddAccessRule(rule);
mut = new Mutex(false, mutexName, out mutexWasCreated, mSec);
答案 0 :(得分:0)
这两个进程是否在不同的会话中运行?你试过了吗?
Mutex mut = new Mutex(false, @"Global\ABC" );
答案 1 :(得分:0)
string mutexName = @"Global\OneComClientDb";
bool mutexWasCreated;
MutexSecurity mSec = new MutexSecurity();
MutexAccessRule rule = new MutexAccessRule(
new SecurityIdentifier(WellKnownSidType.WorldSid, null),
MutexRights.FullControl, AccessControlType.Allow);
mSec.AddAccessRule(rule);
mut = new Mutex(false, mutexName, out mutexWasCreated, mSec);
这是代码