-1

我做了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);

任何回复和评论表示赞赏。

[8月23日更新]

我咨询了一个人。他说showed on another invisible desktop actually我的test2的MessageBox。他推荐我读一本名为“Windows internals”的书。如果发现任何我会稍后更新我的帖子。谢谢。

4

1 回答 1

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 函数。

于 2011-09-28T22:06:13.137 回答