boost::interprocess::message_queue 构造函数在进程在不同用户下运行时失败。
更具体一点。我在 proc1 中创建 message_queue。并尝试从 proc2(另一个用户)打开相同的 message_queue。
有可能让它工作吗?或者我应该找到另一种方法来同步我的流程?
boost-1.52
操作系统: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”消息框。然后失败。
Boost 升级没有帮助。