【问题标题】:c++ cgi app calling other program failsc++ cgi app调用其他程序失败
【发布时间】:2011-03-11 12:51:18
【问题描述】:

我开发了一个在 Windows 和 Linux 下运行的 c++ CGI 程序。

这个程序像这样调用另一个程序:

system("otherProgram.exe arguments");

我也试过了:

spawnl(_P_WAIT, "otherProgram.exe", "argument1", NULL);

这在我的调试器和我的虚拟机中运行良好,但在我的测试服务器上它不起作用。 系统调用返回-1。

有什么想法吗?

【问题讨论】:

  • errno 的值是多少? (查看here 可能的值)
  • 感谢您的提示。 errno 返回 13:权限被拒绝。我不知道为什么,但这至少是一个提示。
  • 你能检查一下服务器上那个程序的读/执行/等权限吗?您的 CGI 程序在哪个帐户下运行?可能会有帮助。

标签: c++ cgi system-calls


【解决方案1】:

这可能是权限问题。默认情况下,您的 CGI 应用程序将像由 nobody 用户一样运行。您要启动的程序应该可以由“nobody”执行。

【讨论】:

  • 包含我的应用程序的文件夹将所有权限授予所有人
  • 我必须为用户Everyone 授予cmd.exe 的权限,然后它就起作用了。
【解决方案2】:

包含“otherProgram.exe”的目录是否位于测试框的PATH 环境变量中的某个目录中?也就是说,您的操作系统是否知道如何找到该程序?

【讨论】:

  • 我先检查程序是否存在,它确实存在,但我无法执行它。我也尝试了控制台命令,但它们不起作用。像“md testFolder”
  • 您也可以考虑尝试执行不需要文件权限或依赖特定路径的shell命令来排除环境问题。 “echo 'Hello World'” 之类的,例如。如果失败,那么您的网络服务器可能没有授予您运行 system() 调用的权限,也许?
  • echo hello 也不起作用。我会问我的管理员是否知道原因
猜你喜欢
  • 2019-12-06
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
相关资源
最近更新 更多