我有一个 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/