我正在尝试将一段匆忙拼凑起来的旧代码重构为更优雅的东西。
该项目有两个部分,一个 Windows 服务和一个监视服务活动的表单应用程序。
为了允许这种通信,我决定使用非持久内存映射文件。
以下是旧项目中的工作代码:
var security = new MemoryMappedFileSecurity();
security.AddAccessRule(new AccessRule<MemoryMappedFileRights>("everyone", MemoryMappedFileRights.FullControl,AccessControlType.Allow));
file = MemoryMappedFile.CreateOrOpen(@"Global\" + instance, bufferSize,
MemoryMappedFileAccess.ReadWrite,
MemoryMappedFileOptions.DelayAllocatePages, security,
HandleInheritability.Inheritable);
上面的代码在一个由 Service 和 Form 运行的 ctor 中,它们使用完全相同的代码,并且无论哪个创建 mmf 都可以工作。
现在我在一个新项目中有相同的代码,但是如果服务首先创建 mmf,那么表单会收到拒绝访问路径的错误,如果表单创建了 mmf,服务会“打开”他的身边,但两者都看不到所写的信息,这让我相信他们实际上并不是在看同一件事。
此时我不知道从哪里开始调试问题,由于会话 0 隔离,我正在使用安全规则和“全局”命名空间。
我只是无法理解为什么它可以在一个而不是另一个中起作用。
任何关于从哪里去的建议将不胜感激。此外,如果需要更多代码,请告诉我。