Проблема переноса ConnectNamedPipe () из XP в Win 7 - PullRequest
0 голосов
/ 29 августа 2011

Мы разработали приложение XP, которое использует ConnectNamedPipe () в режиме блокировки.

При тестировании на Win 7 приложение ведет себя так, как будто оно разблокировано: ConnectNamedPipe () возвращается до того, как его клиент VBS подключается.Возникает исключение («Ожидание процесса, чтобы открыть другой конец канала») при вызове StreamReader.ReadLine ().При работе с отладчиком этого не происходит даже в Win 7!

Вот функции, которые мы используем: [

DllImport("kernel32.dll", SetLastError = true)]
public static extern SafeFileHandle CreateNamedPipe(
String pipeName,
uint dwOpenMode,
uint dwPipeMode,
uint nMaxInstances,
uint nOutBufferSize,
uint nInBufferSize,
uint nDefaultTimeOut,
IntPtr lpSecurityAttributes);
[DllImport("kernel32.dll", SetLastError = true)]
public static extern int ConnectNamedPipe(
SafeFileHandle hNamedPipe,
IntPtr lpOverlapped); 

После того, как мы написали это, мы нашли пример MSиз примеров CodePlex All-In-One Code Framework, которые делают это: (мы пытаемся это сейчас)

[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern SafePipeHandle CreateNamedPipe(string pipeName,
                PipeOpenMode openMode, PipeMode pipeMode, int maxInstances,
                int outBufferSize, int inBufferSize, uint defaultTimeout,
                SECURITY_ATTRIBUTES securityAttributes);
            [return: MarshalAs(UnmanagedType.Bool)]
            [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            public static extern bool ConnectNamedPipe(SafePipeHandle hNamedPipe,
                IntPtr overlapped);

У кого-нибудь есть идея для направления?Может ли это быть связано с безопасностью?Спасибо.

1 Ответ

0 голосов
/ 30 августа 2011

Пример кода, предоставленный MS All-In-One Code Framework (сервер именованных каналов C # для IPC (CSNamedPipeServer)) показывает правильный способ, как это сделать, и он работает на Win 7.

...