0

我开发了一个在 Windows 和 Linux 下使用的 c++ CGI 应用程序。它必须启动另一个应用程序。目前我正在使用系统调用:

system("anotherApp.exe -arguments");

对于该调用,我需要在 Windows 上执行 cmd.exe 的权限,因为系统调用会启动一个 shell。这是一个安全问题,因为我的应用程序是 CGI 应用程序并在网络服务器上使用。

是否有另一种可能在不启动新外壳的情况下调用应用程序?

4

2 回答 2

2

您可以使用CreateProcess并使用该命令设置安全权限。您还可以模拟受限用户,以确保您正在调用的进程仅具有您授予它的权限。

于 2011-04-15T12:12:58.837 回答
1

System() 启动控制台窗口并在该控制台窗口中运行程序。

popen() 在没有控制台窗口的情况下运行程序,并将控制台输出重定向到管道。

CreateProcess() 只是启动程序。你传递一个 flags 参数告诉它如何处理控制台。它还允许程序以对父程序的不同权限运行。

如果您没有 cmd.exe 的权限,则 system() 不在菜单中。

popen() 可以工作,只要程序不需要写入 stdout 或 stderr,因为这将丢失。

你可能最好写这样的东西:

bool RunProgram(const std::string &sProgram, bool bWaitForFinish)
{
#if defined(Win32)
    // Launch with CreateProcess()
    // wait if required
#else
    // launch with fork()/exec() or even system()
    // wait if required
#endif
    return error_status;
}
于 2011-04-15T17:56:10.770 回答