这是我尝试过的,到目前为止它似乎工作得很好:
string mutexName = String.Format(@"Global\{0}", caseId.ToString());
Mutex mutex;
if (!Mutex.TryOpenExisting(mutexName, out mutex))
{
bool isNew;
MutexSecurity mSec = new MutexSecurity();
SecurityIdentifier sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
MutexAccessRule rule = new MutexAccessRule(sid, MutexRights.FullControl, AccessControlType.Allow);
mSec.AddAccessRule(rule);
mutex = new Mutex(false, mutexName, out isNew, mSec);
}
if (mutex.WaitOne(5000))
{
try
{
// read/write/modify the file
}
finally
{
mutex.ReleaseMutex();
}
}
else
{
Common.LogInfoMessage(String.Format("Timed out waiting for pdf mutex. CaseId: {0}", caseId));
}
由于 2 个进程在不同的用户帐户下运行,我必须传入一个 MutexSecurity 对象。在这种情况下,我只是让每个人都可以访问它,但如果我想进一步限制它,我可以只让 2 个帐户访问它。另外,请确保您将名称设为全球...起初没有这样做。
打算运行几天,看看日志怎么说。不过我感觉很好。