2012-02-07 9 views
0

異なるユーザーによって作成されたプロセス間でboostという名前のmutexを共有する際に問題があります。 最初のプロセスはサービスによって作成され、LocalSystemとしてログオンします。 2番目のプロセスは自分で作成します(通常はプロセスを正常に実行します)。Boost named_mutexは、異なるユーザーによって作成されたプロセス間で共有できません。

両方のプロセスは、(C++)この関数を実行します。

void MyFunc() 
{ 
    //Open or create the named mutex 
    named_mutex mutex(open_or_create, "mymutex"); 
    { 
     scoped_lock<named_mutex> lock(mutex); 
     DoSomeWork(); 
    } 
    named_mutex::remove("mymutex"); 
} 

現在、私は両方のプロセスが同時にDoSomeWorkを()を入力することができていることを確認します。 この問題は、サービスが「自分」としてログオンしてから、2番目のプロセスを管理者として実行した場合にのみ発生します。

この問題をブーストまたはいくつかの簡単なコードで解決する方法はありますか? http://support.microsoft.com/kb/193073

(私は「グローバルの\ mymutex」としてミューテックス名を設定しようとしましたが、何のミューテックスを作成することはできません) は(私はまた、Windows CreateMutex()を使用しようとしましたが、中に述べたように、それはまた、同じ問題に苦しんでいますkb193073)

ありがとう!あなたが管理者として問題がないと言うなら

サイモン

答えて

1

、多分それは権限とは何かを持って、これを試してみてください。

void MyFunc() 
{ 
    //Open or create the named mutex 
    permissions allow_all; 
    allow_all.set_unrestricted(); 
    named_mutex mutex(open_or_create, "mymutex", allow_all); 
    { 
    scoped_lock<named_mutex> lock(mutex); 
    DoSomeWork(); 
    } 
    named_mutex::remove("mymutex"); 
} 
関連する問題