【问题标题】:How can I find why system can not run my application?如何找到系统无法运行我的应用程序的原因?
【发布时间】:2014-10-03 09:04:02
【问题描述】:

我有一个运行命令并向其传递一些参数的 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 窗口以便我可以检查它吗?

有没有更好的方法在操作系统上运行命令?

Boost 有解决方案吗?

编辑

使用 cmd /k 运行后,我收到以下错误消息:

The input line is too long.

除了减少 cmd 行,我还能如何解决?

【问题讨论】:

  • 那么 cmd 应该是什么?你能提供更多信息吗?

标签: c++ windows boost cmd


【解决方案1】:

这里有两件不同的事情:如果您必须启动一个 suprocess,“系统”不是最好的方法(最好使用正确的 API,如 CreateProcess,或多平台包装器,但要避免通过命令解释器,以避免打开潜在的恶意软件注入)。

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

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

要做的第一件事是:打开命令提示符并将您发布的字符串粘贴到那里。它运行吗?它是否说明了任何错误?

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

【讨论】:

    【解决方案2】:

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

    或者只是生成cmd.exe 并检查环境、权限等。您可以手动粘贴该命令以查看它是否可以在该shell 中工作。如果是这样,您知道路径、权限和环境都可以,所以您手头上还有一些其他问题(参数转义、字符编码问题)

    【讨论】:

    • 谢谢,你能给我更多的信息吗?应该传递给系统的 cmd 值应该是什么?
    • @mans 我已链接到 cmd.exe 选项的文档页面。如果您还不想阅读文档,请从更简单的事情开始。 (提示:尝试cmd.exe /k dir 一次
    【解决方案3】:

    【讨论】:

    • boost 进程是否适用于 windows7-8 和 x64?当我尝试使用它时,我收到此错误:错误 3 错误 C2665:'boost::system::system_error::system_error':7 个重载中没有一个可以转换所有参数类型 C:\thirdparty\boost\boost \process\detail\pipe.hpp
    • 不好意思,好久没研究了。刚刚意识到,后来发布了一个更新的版本highscore.de/boost/process0.5
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2021-12-25
    • 2014-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    相关资源
    最近更新 更多