2010-02-11 60 views
7

我想從我的C++程序遠程執行另一個應用程序。到目前爲止,我與CreateProcess(...)函數一起玩,它工作得很好。用C++執行另一個程序

然而,問題是我需要其他程序的完整路徑,但我不知道它的目錄。所以我想要的是我只需輸入另一個程序的名稱,比如當你在運行中輸入「cmd」或「winword」時...它會打開相應的程序。

由於提前, 日俄

+1

設置應用到PATH環境變量的完整路徑。 – anil 2010-02-11 12:47:58

+0

@anil:不起作用; PATH環境變量(儘管它的名字)通常是路徑的列表。你需要哪一個? – MSalters 2010-02-11 12:56:35

+0

解析PATH變量,併爲每個元素檢查程序是否存在:-) – 2010-02-11 13:01:12

回答

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設置爲安裝的可執行文件的位置。否則,您可能會啓動惡意代碼。

最有可能從這裏的一些信息結合,將有助於得到正確的位置: Detecting installed programs via registry

格雷格