2011-08-29 4 views
0

차단 모드에서 ConnectNamedPipe()를 사용하는 XP 응용 프로그램을 개발했습니다.XP에서 Windows 7로 ConnectNamedPipe()를 마이그레이션 할 때 문제가 발생했습니다.

Win 7에서 테스트 할 때 응용 프로그램은 차단 해제 된 것처럼 작동합니다. VBS 클라이언트가 연결되기 전에 ConnectNamedPipe()가 반환됩니다. 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); 

방향에 대한 아이디어가 있습니까? 보안과 관련이있을 수 있습니까? 감사.

답변

0

(IPC (CSNamedPipeServer)에 대한 C# 네임드 파이프 서버) MS All-In-One Code Framework 제공하는 코드 샘플이 작업을 수행하는 방법에 적절한 방법을 도시하며 제

승 작동
관련 문제