名前付きパイプを使用する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#アプリがアクセスを拒否されるのはなぜですか?私が知る限り、両方が同じユーザーとして実行されています。