将ConnectNamedPipe()从XP迁移到Win 7时出现问题

时间:2011-08-29 09:17:47

标签: c# windows-7 vbscript windows-xp pipe

我们开发了一个在阻止模式下使用ConnectNamedPipe()的XP应用程序。

在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); 

在我们写完之后,我们在CodePlex多功能一体代码框架示例中找到了一个MS示例:(我们现在正在尝试)

[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 :(得分:0)

MS All-In-One Code Framework(C#命名管道服务器用于IPC(CSNamedPipeServer))提供的代码示例显示了如何执行此操作的正确方法,它适用于Win 7。