4

私は、急いでまとめられた古いコードをもう少しエレガントなものにリファクタリングしようとしています。

プロジェクトには、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\」名前空間を使用しています。

なぜそれが一方では機能し、他方では機能しないのかについて頭を悩ませることはできません。

ここからどこへ行くべきかについてのアドバイスをいただければ幸いです。また、さらにコードが必要な場合はお知らせください。

4

1 に答える 1

-1

それで、多くの悲しみの後、私は自分の問題に対する答えを見つけました.

どうやら Visual Studios は、そのコードを含むファイルをプロジェクトに追加する方法が気に入らなかったようです。私は単に「既存の追加」を行いました。

この問題を解決するために、新しいクラスを作成し、他のファイルからコードをコピーして貼り付けました。

すべてが正常に動作するようになりました。

于 2013-01-15T22:46:20.437 に答える