【问题标题】:Execute another program in C++在 C++ 中执行另一个程序
【发布时间】:2011-01-15 17:04:07
【问题描述】:

我想从我的 C++ 程序远程执行另一个应用程序。到目前为止,我一直在使用 CreateProcess(...) 函数,它工作得很好。

但是问题是我需要另一个程序的完整路径,但我不知道它的目录。所以我想要的是我只需要输入其他程序的名称,比如当你在运行中输入“cmd”或“winword”时......它会打开相应的程序。

提前致谢, 罗素

【问题讨论】:

  • 将应用程序的完整路径设置为PATH环境变量。
  • @anil:不起作用; PATH 环境变量(尽管它的名字)通常是路径的 list。你需要哪一个?
  • 解析 PATH 变量并为每个元素检查程序是否存在 :-)
  • 不,你有 SearchPath() 功能。
  • 我有。我在要使用其路径调用的程序中创建一个新的系统变量,并在使用 CreateProcess 时依赖该变量。无论如何,谢谢。

标签: c++ windows visual-c++ winapi


【解决方案1】:

如果你像这样使用 CreateProcess:

CreateProcessA( "winword.exe", .... );

那么 PATH 变量将不会被使用。需要用到第二个参数:

CreateProcessA( NULL, "winword.exe", .... );

详情请见http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx

【讨论】:

    【解决方案2】:

    您正在寻找ShellExecute()。如果你传递一个正确的 URL,这甚至会起作用,就像运行菜单一样。

    【讨论】:

      【解决方案3】:

      您可以从 start -> run 运行的程序的目录被添加到 PATH 变量中。您可以将程序所在的文件夹添加到 PATH,然后使用 CreateProcess()。但是,您说您不知道目录,所以您可能无法做到这一点。

      你知道部分路径吗?例如,您是否知道您的 exe 将始终位于 C:\something\something\ 或此路径的子文件夹中?如果是这样,查找 FindFirst() 和 FindNext() 以列出该目录中的所有文件并搜索您的 exe,然后在找到您的 exe 时使用 CreateProcess()。

      http://msdn.microsoft.com/en-us/library/aa365200%28VS.85%29.aspx 显示如何列出目录中的文件。您必须修改它以搜索子目录(例如,创建一个递归函数)。

      【讨论】:

        【解决方案4】:

        以任何方式启动程序和依靠 PATH 都被认为是不安全的编码。系统路径可能会被未正确保护的位置(例如网络驱动器)污染。启动应用程序的最佳方法是从它所在的位置启动可执行文件,并将 CWD 设置为已安装的可执行文件的位置。否则你可能会启动恶意代码。

        这里的一些信息组合很可能有助于正确获取位置: Detecting installed programs via registry

        格雷格

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-22
          • 2011-07-24
          • 2013-07-07
          • 2014-06-10
          • 2016-09-04
          相关资源
          最近更新 更多