我想從我的C++程序遠程執行另一個應用程序。到目前爲止,我與CreateProcess(...)函數一起玩,它工作得很好。用C++執行另一個程序
然而,問題是我需要其他程序的完整路徑,但我不知道它的目錄。所以我想要的是我只需輸入另一個程序的名稱,比如當你在運行中輸入「cmd」或「winword」時...它會打開相應的程序。
由於提前, 日俄
我想從我的C++程序遠程執行另一個應用程序。到目前爲止,我與CreateProcess(...)函數一起玩,它工作得很好。用C++執行另一個程序
然而,問題是我需要其他程序的完整路徑,但我不知道它的目錄。所以我想要的是我只需輸入另一個程序的名稱,比如當你在運行中輸入「cmd」或「winword」時...它會打開相應的程序。
由於提前, 日俄
如果您正在使用的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設置爲安裝的可執行文件的位置。否則,您可能會啓動惡意代碼。
最有可能從這裏的一些信息結合,將有助於得到正確的位置: Detecting installed programs via registry
格雷格
設置應用到PATH環境變量的完整路徑。 – anil 2010-02-11 12:47:58
@anil:不起作用; PATH環境變量(儘管它的名字)通常是路徑的列表。你需要哪一個? – MSalters 2010-02-11 12:56:35
解析PATH變量,併爲每個元素檢查程序是否存在:-) – 2010-02-11 13:01:12