Вопрос по C # App MessageBox.Show (), который вызывается Cpp App CreateProcess () - PullRequest
0 голосов
/ 22 сентября 2011

Я сделал 2 теста.

Я получил два приложения, которые работали на одном компьютере. Первый раз, когда я нажимаю на мой CsAPP.exe . MessageBox.Show() работает довольно хорошо, и новое окно появляется так, как я хотел.

Второй раз, когда я запускаю CppAPP.exe , 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);

Любые ответы и комментарии приветствуются.

[Обновлено 23 августа]

Я консультировался с одним парнем. И Он сказал, что MessageBox showed on another invisible desktop actually для моего теста2. Он порекомендовал мне прочитать книгу под названием «Внутренние компоненты Windows». Если найдется, я обновлю свой пост позже. Спасибо.

1 Ответ

0 голосов
/ 29 сентября 2011

Попробуйте создать процесс в контексте пользователя.
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.

...