微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有比在system中用C ++提取命令更好的方法?

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

更糟糕的是,我似乎无法得到任何有关system()失败的信息。 似乎没有任何exception,因为我正在做一个捕捉(…),没有任何东西被抓到。 我的服务停止运行。 我知道这是对system()的调用失败,因为我在调用之前和之后放置了日志信息,之后的任何事情都不logging任何东西。

那么,有没有另外一种方法可以剔除我的命令? 至less,如果事情出错,会给我一些信息,或者至less让我处理一个例外或什么。

在C中从系统命令开始的进程inheritance父级fd's

如何在C ++中检查用户的系统权限

为什么System.getProperty不能从Windows系统variables中返回值

多个FileSystemWatchers监视本地系统上的文件

我如何确定在Python中打开文件的大小?

如何检查PHP作业实例

如何回收稀疏文件的归零块?

系统在从linux中的c ++调用时返回错误127

Haskell:从/ proc读取。 严格和懒惰的问题。 进程统计

模拟netcat -e

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

我也看到system()由于其他外部原因,例如病毒扫描程序失败,所以你也可以调查。

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

编辑:如果它仍然只是似乎没有理由的崩溃,你可以尝试使用进程监视器来看看下一步发生了什么。 由于进程监视器的输出可能有些压倒一切,我喜欢使用的技巧是在调用system()向程序添加一个语句,以打开一个不存在的文件,如“C: MARKER.TXT”或其他,那么你可以在进程监视器输出搜索文件名称,然后查看可能与问题有关的条目。

普通catch()不会捕获致命的异常(例如段错误)。 你必须使用结构化的异常处理。 更好的是,启用事后调试; 本文将介绍如何启用服务的验尸调试。

你可以使用fork / exec,但我认为这就是系统正在做的事情。

我认为你的问题可能是你的服务相关的用户帐户。

一个环境问题(缺少路径中的条目)或者服务用来运行的帐户没有权限执行任何你想运行的东西。

运行services.msc并查看您的服务的属性。 在登录页面上,作为测试,更改设置,以便使用您的帐户运行服务。 如果成功,你就知道问题是什么。

一个要看的是服务中的路径。 使用getenv(“PATH”),看看你可能依赖的路径是否缺失。

希望这可以帮助…

我结束了使用CreateProcess。 到目前为止,它一直在努力。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐