用C ++执行另一个程序

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

然而,问题是我需要其他程序的完整path,但我不知道它的目录。 所以我想要的是我只需要input另一个程序的名字,比如当你在运行中键入“cmd”或者“winword”,它就会打开相应的程序。

在此先感谢,Russo

如果你使用这样的CreateProcess:

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

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

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

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

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

可以从“开始” – >“运行”运行的程序的目录被添加到PATH变量中。 您可以将程序所在的文件夹添加到PATH,然后使用CreateProcess()。 但是,你说你不知道目录,所以你可能不能这样做。

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

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

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

最有可能来自这里的信息的一些组合将有助于正确地获取位置: 通过注册表检测已安装的程序

格雷格