4

我正在尝试将一段匆忙拼凑起来的旧代码重构为更优雅的东西。

该项目有两个部分,一个 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 隔离,我正在使用安全规则和“全局”命名空间。

我只是无法理解为什么它可以在一个而不是另一个中起作用。

任何关于从哪里去的建议将不胜感激。此外,如果需要更多代码,请告诉我。

4

1 回答 1

-1

因此,在悲痛欲绝之后,我找到了问题的答案。

显然 Visual Studios 不喜欢我如何将包含该代码的文件添加到我的项目中。我只是做了一个“添加现有”。

为了解决这个问题,我创建了一个新类,并从另一个文件中复制/粘贴了代码:

现在一切正常。

于 2013-01-15T22:46:20.437 回答