c++ - 有没有比 system() 更好的方法来在 C++ 中执行命令?

标签 c++ windows shell system

我有一个 C++ Windows 服务,当我调用 system() 函数来执行命令时有时会崩溃。我已经在 Windows 命令行中运行了命令的确切文本,它运行得很好,但由于某种原因,它在运行 system() 时失败了。

更糟糕的是,我似乎无法获得有关 system() 失败原因的任何信息。似乎没有引发异常,因为我正在执行 catch(...) 并且没有任何内容被捕获。我的服务刚刚停止运行。我知道是对 system() 的调用失败了,因为我在调用之前和之后都添加了日志信息,而之后的任何内容都不会记录任何内容。

那么,有没有其他方法可以执行我的命令?至少,如果出现问题,可以给我一些信息,或者至少让我处理异常之类的东西。

最佳答案

我相信 system() 在技术上是 C 标准库的一部分,因此不会抛出异常。您应该能够检查返回代码或 ERRNO 变量以获得有关所发生情况的一些信息。这MSDN链接包含有关 Windows 上可能的返回码的一些信息。

我还看到 system() 由于其他外部原因(例如病毒扫描程序)而失败,因此您也可以调查一下。

我不知道有什么更好的方法来运行 shell 命令,但我可能是错的。

编辑:如果它似乎仍然无缘无故崩溃,您可以尝试使用 process monitor看看在较低层次上发生了什么。由于进程监视器的输出可能有点让人不知所措,我喜欢使用的一个技巧是在调用 system() 之前添加一条语句,以打开一个不存在的文件,如“C:\MARKER.TXT"或其他东西,然后您可以在进程监视器输出中搜索文件名,然后立即查看可能与问题有关的条目。

关于c++ - 有没有比 system() 更好的方法来在 C++ 中执行命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060625/

相关文章:

C++:将自身结构的地址作为参数传递给 pthread_create 时出错:什么覆盖了我的数据?

windows - 从 Windows Batch 中的 ASCII 代码返回字符

c# - 键集未定义

如果命令行输出不包含字符串,则发送邮件的 Bash 脚本

linux - 在 bash 脚本中连接输入

C++ 我无法访问我需要的功能

c++ - 在 C++ 中编辑现有文件

c++ - 循环遍历多维数组

python - windows上从python连接odbc的常用方法?

shell - 防止重复变量并使用 awk 语句进行打印