用C ++执行另一个程序

时间:2010-02-11 12:44:38

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

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

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

提前致谢, 俄

4 个答案:

答案 0 :(得分:8)

如果您正在使用CreateProcess:

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

然后将不使用PATH变量。您需要使用第二个参数:

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

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms682425%28VS.85%29.aspx

答案 1 :(得分:7)

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

答案 2 :(得分:1)

您可以从开始运行的程序目录 - > 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显示了如何列出目录中的文件。您必须修改它以搜索子目录(例如,创建一个递归函数)。

答案 3 :(得分:1)

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

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

格雷格