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