提问者:小点点

使用QProcess启动另一个exe并生成路径错误的文件


我最近遇到一个问题。 我使用QProcess类启动a.proce中的B.exea.pro的绝对路径是C:/qt/a/a.pro。 我使用windeployqtb.exe进行打包,并将打包文件夹放在c:/qt/a/b/b.exe中。

B.exe中,程序将生成一个名为test.json的文件。 test.json的路径与b.exe相同。 但我在a.pro中使用以下代码,test.json生成的路径与a.pro相同,但不在C:/qt/a/b文件夹中:

bool f=QProcess::StartDetached(“。/b/b.exe”);

行代码返回true。 我认为test.json应该在C:/qt/a/b文件夹中生成,而不是在C:/qt/a中生成。 当我双击b.exestandlone时,它可以正确生成。 但是当我在a.pro中使用上面的代码进行调试时,它的工作失败了,它只是创建了一个空文件。

你能帮我吗?


共1个答案

匿名用户

如果您查看QProcess::StartDetached,它的内容如下:

进程将在目录workingdirectory中启动。 如果workingDirectory为空,则从调用进程继承工作目录。

您需要为qprocess设置工作目录。 当您通过“双击”B.exe来运行它时。 您的操作系统从启动位置设置工作目录,即c:/qt/a/b。 但是当您从。exe启动它时,它的工作目录是C:/qt/a/

您可以在此处阅读有关QProcess::SetWorkingDirectory的内容。 但是,由于您正在使用QProcess::StartDetached重载运行它,因此只需将Wanded working directory作为参数传递:

bool f = QProcess::startDetached("./B/B.exe", QStringList(), "./B/");