C ++系统函数挂起应用程序

时间:2009-06-12 16:17:19

标签: c++ process

我有以下代码

void reportResults() 
  {
    wstring env(_wgetenv(L"ProgramFiles"));
    env += L"\Internet Explorer\iexplore.exe";
    wstringstream url;
    url << "\"\"" << env.c_str() << "\"  http://yahoo.com\"";
    wchar_t arg[BUFSIZE];
    url.get(arg, BUFSIZE);
    wcout << arg << endl;
    _wsystem(arg);
  }

其中arg是: “”C:\ Program Files \ Internet Explorer \ iexplore.exe“http://yahoo.com

该程序按预期运行,启动IE并导航到Yahoo,但调用函数(reportResults)永远不会退出。如何让程序退出让浏览器保持活动状态? 感谢。

5 个答案:

答案 0 :(得分:7)

您想使用_wspawn()而不是_wsystem()。这将为浏览器进程生成一个新进程。 _wsystem()阻止您创建的命令;这就是为什么你没有回到你的代码。 _wspawn()创建一个新的独立进程,该进程应立即返回到您的代码。

答案 1 :(得分:6)

_wsystem命令将等待arg中的命令返回并返回命令的返回值。如果关闭Internet Explorer窗口,它会将命令返回给您的程序。

答案 2 :(得分:5)

为什么不使用ShellExecute启动具有给定网址的默认浏览器?

<强>梗概:

LONG r = ShellExecute(NULL, "open", "http://www.microsoft.com", NULL, NULL, SW_SHOWNORMAL);

修改

我想,因为它必须是IE,这可能有效(注意,未经测试的代码):

LONG r = ShellExecute(NULL, NULL, "iexplore.exe", "http://www.microsoft.com", NULL, SW_SHOWNORMAL);

答案 3 :(得分:0)

如果要使用当前实现,则必须fork()进程并让子进程处理浏览器生成。因此,主要过程将继续并退出该功能。

答案 4 :(得分:0)

而不是执行

"C:\Program Files\Internet Explorer\iexplore.exe" "http://yahoo.com"

执行

start "C:\Program Files\Internet Explorer\iexplore.exe" "http://yahoo.com"