gtk-调用外部命令后,如何防止其关闭gtk主窗口

gtk-调用外部命令后,如何防止其关闭gtk主窗口,gtk,phpexcel,Gtk,Phpexcel,我想从GtkListStore读取数据,并通过phpExcel构建excel。首先,我根据GtkListStore构建了一个php文件,然后使用php和phpexcel库编译并构建了execl文件 在我的gtk代码(在MinGW环境中编译)中,我使用了execvp(cmd[0],(const char**)cmd)调用外部命令--php。实际上,cmd[0]是php.exe和cmd[1],cmd[2]。。。是php的参数。调用php命令后,我的gtk主窗口关闭,退出我的gtk程序 如何防止php

我想从GtkListStore读取数据,并通过phpExcel构建excel。首先,我根据GtkListStore构建了一个php文件,然后使用php和phpexcel库编译并构建了execl文件

在我的gtk代码(在MinGW环境中编译)中,我使用了
execvp(cmd[0],(const char**)cmd)
调用外部命令--php。实际上,
cmd[0]
是php.exe和cmd[1],cmd[2]。。。是php的参数。调用php命令后,我的gtk主窗口关闭,退出我的gtk程序


如何防止php命令退出主程序?我应该用别的东西而不是
execvp
?谢谢。

execvp()
和朋友用另一个进程替换当前进程,因此您的程序退出也就不足为奇了。使用或一个相关函数-它将运行php程序,然后将控制权返回到原始程序。

让我回答我自己的问题。下面是我过去几天在谷歌上搜索和尝试过的内容的总结。它没有什么新东西,但对像我这样的新手可能有用

首先,感谢托马托。为了避免我在GTK中遇到的问题,它必须使用
g_spawn_sync
或相关函数。如果命令是绝对路径,则不必使用标志
G\u SPAWN\u SEARCH\u path
,否则,请确保使用该标志

以下是与
MinGW
环境相关的内容

->gspawn-win32-helper.exe
在MinGW中,要使用g_spawn_sync,必须安装
gspawn-win32-helper.exe
。当我安装GTK环境时,我只提取了有用的lib或exe文件,我认为它很有用,然后我错过了gspawn-win32-helper.exe,这导致了问题--
无法执行上述注释中提到的helper程序(没有这样的文件或目录)
。从中提取并安装gspawn-win32-helper.exe后,g_spawn_sync工作


->对于规范的Windows路径,双反斜杠和单正斜杠都有效,例如c:/foo/bar和c:\foo\bar都有效。

。我想
g\u spawn\u sync
就是我想要的。但它不起作用。我的程序正在
MinGW
中运行。使用
如果(!g_spawn_sync(NULL,argv,NULL,0,NULL,NULL,NULL,&out,&stder,&exit,&error))
将输出错误消息
无法执行帮助程序(没有这样的文件或目录)
argv
是一个简单的
ls
命令。有什么问题吗?请确保在标志中使用
G\u SPAWN\u SEARCH\u PATH
,否则将找不到
ls
命令,因为它不在当前目录中。我只是在家里的纯Linux环境中尝试了上面提到的代码。它仍然不起作用。但是,如果我使用绝对路径,例如“/bin/ls”,它就工作了。然而,当我在办公室里,在
MinGW
环境中运行程序时,我尝试了绝对路径和相对路径,但都不起作用。所以,我现在有点困惑。是关于
MinGW
环境的问题吗?还有一件事,我在MinGW中使用gtk2.10.11(一个非常旧的版本),在家中使用gtk2.24.6。这是版本问题吗?在MinGW中,我使用了绝对路径,例如argv[0]=“c:\\php\\php.exe”和argv[1]=“c:\\user\\foo.php”,因为我不必使用标志
g\u SPAWN\u SEARCH\u path
,但它失败并说“没有这样的文件”。正斜杠不起作用。在纯Linux环境中,绝对路径和相对路径都起作用。在MinGW,它们都不起作用。真奇怪。我在MinGW中找不到方法:(.是否有可能用于MinGW的gtk2.10.11版本的
g_spawn_sync
有bug?