我想从我的C ++程序远程执行另一个应用程序。到目前为止,我一直使用CreateProcess(...)函数,它工作得很好。
然而问题是我需要其他程序的完整路径,但我不知道它的目录。所以我想要的是我只需要输入其他程序的名称,比如当你在“运行...”中键入“cmd”或“winword”时,它会打开相应的程序。
提前致谢, 俄
答案 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
格雷格