2011-09-22 72 views
-1

我已经完成了2个测试。关于C#应用程序MessageBox.Show()调用的问题应用程序CreateProcess()

我有两个应用程序在同一台计算机上运行。 第一次,当我点击我的CsAPP.exeMessageBox.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); 

任何答复和评论赞赏。

[Updated on Aug 23rd]

我咨询了一个人。他说我的test2的MessageBox showed on another invisible desktop actually。他建议我阅读一本名为“Windows内部”的书。如果发现任何问题,我会稍后更新我的帖子。谢谢。

回答

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