如何找到系统无法运行我的应用程序的原因?

时间:2014-10-03 09:04:03

标签: c++ windows boost cmd

我有一个运行命令的c ++程序并将一些参数传递给它。代码如下:

 int RunApplication(fs::path applicationPathName,std::string arguments)
 {
    std::string applicationShortPath=GetShortFileName(applicationPathName);
    std::string cmd="\""+applicationShortPath +"\"  "+ arguments+" >>log.txt 2>&1 \"";
    std::cout<<cmd<<std::endl;
    int result=std::system(cmd.c_str());
    return result;
 }

当我运行系统命令时,cmd窗口会很快出现然后关闭,但结果为1且cmd未运行(该命令应生成未生成的输出)。

要检查cmd是否正确,我在系统行之前停止了应用程序,并将cmd内容复制/粘贴到cmd窗口并且它工作正常。

我想知道如何才能找到为什么应用程序不在system()中运行?

cmd在运行之前有这个值:

"D:/DEVELO~3/x64/Debug/enfuse.exe"  -w --hard-mask --exposure-weight=1 --saturation-weight=0.328 --contrast-weight=0.164 -o "C:/Users/m/AppData/Local/Temp/1.tif"  "C:/Users/m/AppData/Local/Temp/1.jpg" "C:/Users/m/AppData/Local/Temp/2.jpg"  >>log.txt 2>&1 "

我怎样才能找到它无效的原因?

我有没有办法设置系统,以便它不关闭cmd窗口,以便我可以检查它?

有没有更好的方法在OS上运行命令?

Boost对此有什么解决方案吗?

修改

使用cmd / k运行后,出现此错误消息:

The input line is too long.

除了减少cmd线以外,我该如何解决?

3 个答案:

答案 0 :(得分:1)

这里有两个不同的东西:如果你必须启动一个suprocess,&#34; system&#34;这不是最好的方法(更好地使用适当的API,如CreateProcess或多平台包装器,但避免通过命令解释器,以避免打开潜在的恶意软件注入)。

但是在这种情况下,system()可能是正确的方法,因为你实际上需要命令解释器(你只能在创建进程的情况下管理>>log.txt 2>&1之类的东西。)

问题看起来像是被调用程序中的失败:可能是路径不正确,或者它必须使用的某些文件不存在或可以使用适当的权限访问等等。

要做的第一件事:打开一个命令提示符并粘贴你发布的字符串。它运行吗?是否说出任何错误?

要检查的另一件事是如何在C ++文字中使用转义序列:要获得'\',您需要'\\',因为第一个是第二个转义(如\n,或\t等。虽然看起来并非如此,但这是最常见的错误之一。

答案 1 :(得分:0)

使用cmd /k保留终端:http://ss64.com/nt/cmd.html

或者只是生成cmd.exe并检查环境,权限等。您可以手动粘贴该命令以查看它是否可以从该shell运行。如果确实如此,你知道路径,权限和环境都可以,所以你手上还有其他问题(参数转义,字符编码问题)

答案 2 :(得分:0)