1

プロセスが異なるユーザーで実行されている場合、boost::interprocess::message_queue コンストラクターが失敗します。
もっと具体的に。proc1 で message_queue を作成しています。proc2 (別のユーザー) から同じ message_queue を開こうとしています。
それを機能させることは可能ですか?または、プロセスを同期する別の方法を見つける必要がありますか?

boost-1.52
OS: Windows 7 x86
コンパイラ: MSVC 2010

PSコードは簡単です。両方のプロセスが同じユーザーから開始された場合、完全に機能します。

PPS これは私が持っているメッセージ ボックスです。LastWindowError() を呼び出すことができませんでした...

---------------------------
Error
---------------------------
Runtime Error (at 18:421):



External exception E06D7363.
---------------------------
ОК   
---------------------------

私のコード(Process2の):

   void ipcMsg1(HWND hWnd) {
    util::MsgBox mb(hWnd, L"Sending Message1");
    try {
        mb.info(L"create mq");
        bipc::message_queue mq(bipc::open_or_create, plmqproto::g_mqName, plmqproto::g_mqSize, sizeof(int));
        mb.info(L"created");
        const int msg = plmqproto::g_mqMessage1;
        mq.send(&msg, sizeof(msg), 0);
        bipc::message_queue::remove(plmqproto::g_mqName);
    } catch(const bipc::interprocess_exception &ex) {
        mb.error(plcore::stringToWString(ex.what()));
        std::wstringstream ss;
        const unsigned long we = GetLastError();
        ss << L">1. GetLastError: " << we << std::endl;
        ss << L" " << plcore::GetWindowsErrorMessage(we); 
        mb.error(ss.str());
    } catch(const std::exception &ex) {
        mb.error(plcore::stringToWString(ex.what()));
        std::wstringstream ss;
        const unsigned long we = GetLastError();
        ss << L">2. GetLastError: " << we << std::endl;
        ss << L" " << plcore::GetWindowsErrorMessage(we); 
        mb.error(ss.str());
    } catch(...) {
        std::wstringstream ss;
        const unsigned long we = GetLastError();
        ss << L">3. GetLastError: " << we << std::endl;
        ss << L" " << plcore::GetWindowsErrorMessage(we); 
        mb.error(ss.str());
    }
}

そう。「mq の作成」メッセージ ボックスしか表示されません。そしてその後失敗。

ブーストのアップグレードは役に立ちませんでした。

4

0 に答える 0