2011-09-22 2 views
-1

나는 2 번의 테스트를 수행했습니다.Cpp App CreateProcess()에 의해 호출 된 C# App MessageBox.Show()에 대한 질문

같은 컴퓨터에서 실행되는 두 개의 응용 프로그램이 있습니다. 첫 번째로 클릭 할 때 CsAPP.exe. MessageBox.Show()은 아주 잘 작동하고 내가 원하는 방식으로 새 창이 팝업됩니다. 내가 CppAPP.exe 실행할 때

2 시간은 CreateProcess()가 CsApp.exe를 호출 할 수있다. 이 시점에서 내 MessageBox.Show()이 작동하지 않습니다. 내 CsApp 코드에 중단 점을 설정하고 코드가 MessageBox.Show()으로 실행되었음을 확인했지만 팝업 창이 표시되지 않았습니다.

는 C++ 코드는

CreateProcess(apppath.c_str(), NULL, &sa, &sa, FALSE, 0, NULL, appdir.c_str(), &si, &pi); 

는 C# 코드가

MessageBox.Show("Read " + xmlFile + " failed, an invalid XML format file found", 
       "Critical Warning", 
       MessageBoxButtons.OK, 
       MessageBoxIcon.Error); 

모든 응답을 니펫을하고 의견을 부탁드립니다 니펫을.

[업데이트 : Aug 23rd]

나는 한 남자와상의했다. 그리고 그는 내 test2에 대한 MessageBox showed on another invisible desktop actually 말했다. 그는 나를 'Windows internals'라는 책을 읽도록 추천했다. 발견되면 나는 나중에 내 게시물을 업데이 트됩니다. 감사.

답변

0

사용자 컨텍스트에서 프로세스를 생성 해보십시오.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682429%28v=vs.85%29.aspx

지금까지 내가 읽을 때, 문제는 여기에 설명되어 있습니다 :
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682425%28v=vs.85%29.aspx

호출 한 프로세스가 다른 사용자를 가장하는 경우는, 새로운 프로세스는 호출 한 프로세스가 아닌위한 토큰을 사용하여 명의 도용 토큰. 가장 프로세스 토큰이 나타내는 사용자의 보안 컨텍스트에서 새 프로세스를 실행하려면 CreateProcessAsUser 또는 CreateProcessWithLogonW 함수를 사용하십시오.