C에 하나와 C #에 하나씩 2 개의 실행 파일이 있으며 명명 된 파이프를 통해 통신하기를 원합니다.
C # 앱은 연결을 기다리지 만 연결을 얻지 못합니다
. C 앱은 파이프를 만들려고 시도하지만 항상 ERROR_PIPE_BUSY 가 발생
합니다. 분명히 뭔가 잘못하고 있지만 볼 수 없습니다.
public partial class MainWindow : Window
{
private NamedPipeServerStream pipeServer;
public MainWindow()
{
InitializeComponent();
pipeServer = new NamedPipeServerStream("TestPipe", PipeDirection.In);
Debug.WriteLine("waiting");
pipeServer.WaitForConnection();
Debug.WriteLine("Connected");
}
}
while (1)
{
_pipe = CreateNamedPipe(pipename,
PIPE_ACCESS_OUTBOUND,
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT, // FILE_FLAG_FIRST_PIPE_INSTANCE is not needed but forces CreateNamedPipe(..) to fail if the pipe already exists...
1,
1024 * 16,
1024 * 16,
NMPWAIT_USE_DEFAULT_WAIT,
NULL);
// Break if the pipe handle is valid.
int err = GetLastError();
printf("created pipe %d\n", err);
if (_pipe != INVALID_HANDLE_VALUE)
break;
// Exit if an error other than ERROR_PIPE_BUSY occurs.
if (err != ERROR_PIPE_BUSY)
{
printf("Could not open pipe. GLE=%d\n", GetLastError());
exit(-1);
}
// All pipe instances are busy, so wait for 20 seconds.
if (!WaitNamedPipe(pipename, 20000))
{
printf("Could not open pipe: 20 second wait timed out.");
exit(-1);
}
}
내 오류는 무엇입니까
액세스 거부 메시지를 극복하기 위해 파이프를 만들 때 액세스 권한을 설정해야합니다.
PipeSecurity CreateSystemIOPipeSecurity()
{
PipeSecurity pipeSecurity = new PipeSecurity();
var id = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null);
// Allow Everyone read and write access to the pipe.
pipeSecurity.SetAccessRule(new PipeAccessRule(id, PipeAccessRights.ReadWrite, AccessControlType.Allow));
return pipeSecurity;
}
public MainWindow()
{
InitializeComponent();
PipeSecurity ps = CreateSystemIOPipeSecurity();
pipeServer = new NamedPipeServerStream(
"TestPipe",
PipeDirection.InOut,
1,
PipeTransmissionMode.Byte,
PipeOptions.Asynchronous,
512,
512,
ps,
System.IO.HandleInheritability.Inheritable);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다