首先,谢谢你读到这个:)
我使用DLL共享内存并使用interlocked~函数。 (赢7)
由服务exe和用户app exe加载的DLL。
你知道,服务会话是0,用户会话是1那么不同。
如果DLL的共享内存值由用户app exe更改,则不反映服务的DLL共享内存值。
有没有办法同步服务和用户应用程序的DLL共享内存?
答案 0 :(得分:2)
共享部分不再跨会话边界工作。微软认为这是一个安全问题,并且如果内存服务的话,很久以前就故意破坏了这个功能。我相信每个会话现在都会看到自己的部分私人副本。
然而,内存映射文件(MMF)工作正常,我现在用它代替共享部分。唯一的挫折是全局可用的MMF必须以高权限创建,所以我使用服务来创建MMF。
答案 1 :(得分:1)
尝试使用全局共享内存。 Microsoft's documentation说:
使用“Global”允许前缀文件映射对象名称 即使它们处于不同的状态,也可以相互通信 终端服务器会话。
答案 2 :(得分:0)
不要忘记credentials在跨会话共享内存时也起作用。
这要求第一个进程必须具有SeCreateGlobalPrivilege权限