7

名前付きパイプを使用するWCFサービスがあります。どうやら名前にURLを使用していません。URLからGUIDを生成し、それをメモリマップトファイルに保存します。そこで、メモリマップトファイルからパイプの名前を取得するC ++アプリを作成しました。これは、うまく機能します。今、私はメモリマップトファイルからパイプの名前を取得するac#アプリを作成しようとしています。これが私が使用しているコードです。

    private static string GetPipeName(string mappedFileName)
    {
        var mappedFile = MemoryMappedFile.OpenExisting(mappedFileName, MemoryMappedFileRights.Read);
        var bytes = new List<byte>();
        using (MemoryMappedViewStream s = mappedFile.CreateViewStream())
        {
            using (var b = new BinaryReader(s))
            {
                bytes = b.ReadBytes((int)b.BaseStream.Length).ToList();
            }

        }
        var sb = new StringBuilder();
        foreach (var b in bytes)
        {
            sb.Append(b.ToString("x2"));
            sb.Append(" ");
        }
        Console.WriteLine(sb.ToString());
        return sb.ToString();
    }

最初のusingステートメントで、「パスへのアクセスが拒否されました」というUnauthorizedAccessExceptionが発生します。

ステップスルーして、ファイル名がc ++アプリで使用しているものと同じであり、SysInternalsツールHandle.exeを使用したときに表示されることを確認できました。

C#アプリがアクセスを拒否されるのはなぜですか?私が知る限り、両方が同じユーザーとして実行されています。

4

1 に答える 1

5

以下を使用する必要があります

CreateViewAccessor(Int64, Int64, MemoryMappedFileAccess);
于 2012-08-03T19:32:15.017 に答える