在C++中执行另一个程序

7

我希望能从我的C++程序中远程执行另一个应用程序。目前我使用了CreateProcess(...)函数并且它完美地运行了。

然而问题在于,我需要另一个程序的完整路径,但我不知道它的目录。因此,我希望只需输入另一个程序的名称,就像在“运行”中输入“cmd”或“winword”一样,它就会打开相应的程序。

提前感谢, Russo


1
将应用程序的完整路径设置为PATH环境变量。 - anil
@anil:不起作用;PATH环境变量(尽管它的名字是这样)通常是路径列表。你需要其中哪一个? - MSalters
解析 PATH 变量,对于每个元素检查程序是否存在 :-) - Tadeusz Kopec for Ukraine
不需要,你可以使用 SearchPath() 函数来实现。 - MSalters
我已经解决了。我在程序中创建了一个新的系统变量,我想要通过它的路径来调用,并且在使用CreateProcess时依赖于该变量。无论如何,还是谢谢。 - Russo
4个回答

8

7
你需要使用ShellExecute()。如果你传递一个正确的URL,它甚至可以像运行菜单一样工作。

1

可以从“开始”菜单 -> “运行”启动的程序目录被添加到PATH变量中。您可以将程序所在的文件夹添加到PATH中,然后使用CreateProcess()来运行该程序。但是,既然您不知道程序的目录,那么您可能无法这样做。

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

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


1
启动程序并依赖于PATH被视为不安全的编程方式。系统路径可能会受到未正确保护(例如网络驱动器)的位置污染。启动应用程序的最佳方式是从其所在位置启动可执行文件,并将CWD设置为安装的可执行文件的位置。否则,您可能会启动恶意代码。
最有可能从这里的信息组合中获得正确的位置: 通过注册表检测已安装的程序 格雷格

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接