私は、急いでまとめられた古いコードをもう少しエレガントなものにリファクタリングしようとしています。
プロジェクトには、Windows サービスと、サービス アクティビティを監視するフォーム アプリケーションの 2 つの部分があります。
この通信を可能にするために、非永続的なメモリ マップ ファイルを使用することにしました。
以下は、古いプロジェクトの作業コードです。
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);
上記のコードは、サービスとフォームの両方によって実行される ctor 内にあり、まったく同じコードを使用し、どちらが mmf を作成するかに関係なく機能します。
今、私は新しいプロジェクトにこれと同じコードを持っていますが、サービスが最初にmmfを作成すると、フォームはパスへのアクセスが拒否されたというエラーを受け取り、フォームがmmfを作成すると、サービスは彼の側をうまく「開きます」が、どちらも見ることができません書かれた情報は、彼らが実際に同じものを見ているわけではないと私に信じさせます.
この時点で、どこから問題のデバッグを開始すればよいかわかりません。セッション 0 分離のため、セキュリティ ルールと「Global\」名前空間を使用しています。
なぜそれが一方では機能し、他方では機能しないのかについて頭を悩ませることはできません。
ここからどこへ行くべきかについてのアドバイスをいただければ幸いです。また、さらにコードが必要な場合はお知らせください。