我正在写一个Windows应用程序,它需要共享多个实例(进程)之间的某个日期。 我选择使用升压进程间。 经过一番调查,我发现managed_windows_shared_memory是最适合我的情况。 但是第二进程不能打开通过第一进程创建的共享内存。
规范第1实例:
#include <boost/interprocess/managed_windows_shared_memory.hpp>
using namespace boost::interprocess;
typedef boost::interprocess::managed_windows_shared_memory SharedMemory;
SharedMemory sharedMemory(create_only, "MyTestSharedMemory", 65535);
代码第二个实例:
#include <boost/interprocess/managed_windows_shared_memory.hpp>
using namespace boost::interprocess;
typedef boost::interprocess::managed_windows_shared_memory SharedMemory;
try
{
SharedMemory sharedMemoryT(open_only, "MyTestSharedMemory");
}
catch (interprocess_exception &ipce)
{
if (ipce.get_error_code() == not_found_error)
{
::OutputDebugStringA("Not found");
}
}
我敢肯定,当第二个实例试图打开共享内存,1实例进程仍在运行(不退出)。
通过运行accesschk.exe,我敢肯定,在创建共享内存系统对象,当第二个实例试图打开它仍然退出。 下面是关于该共享存储器的输出。 这里的“我的域”,“我的账户”和“我的域帐户”在我的环境中的实际值。
\Sessions\5\BaseNamedObjects\MyTestSharedMemory
Type: Section
Medium Mandatory Level (Default) [No-Write-Up]
RW NT AUTHORITY\SYSTEM
SECTION_ALL_ACCESS
RW my-domain\my-account
SECTION_ALL_ACCESS
RW my-domain\my-domain-account
SECTION_ALL_ACCESS
每到这时,第二个实例被“not_found_error”。 如果我尝试先创建共享内存,然后尝试在相同的情况下,它的成功将其打开。 任何想法? 我在Windows 8.1。
更多信息。 这两种情况下,在同一个用户帐户相同的会话中运行。
我试图在第一个实例,并在第二个实例OpenFileMapping使用Windows API的CreateFileMapping,效果很好!
我也试过,而不是使用managed_windows_shared_memory升压managed_shared_memory,它也适用。
然后我试图使用boost windows_shared_memory,例如一号成功创建,但第二个实例无法找到它。
貌似在共享内存类(managed_windows_shared_memory / windows_shared_memory)升压原生Windows的一些问题。