2016-11-24 28 views
0

我需要從我的項目中啓動外部程序c:\pro\prog1.exe。外部程序的配置文件位於同一目錄c:\pro\prog1.ini。我做的:在其目錄中啓動外部程序

ShellExecute(NULL,L"open",L"c:\pro\prog1.exe" ,NULL,NULL,SW_SHOWDEFAULT); 

計劃c:\pro\prog1.exe啓動,但它不會加載它的配置文件c:\pro\prog1.ini。它看起來像我需要將.ini文件放在運行我的主機應用程序的同一目錄中。這是不可接受的。那麼,如何啓動一個外部程序並讓Windows從它的目錄運行呢?

+0

爲什麼不使用Process類及其ProcessStartInfo支持類?因此,您可以指定完全的工作目錄 – Steve

+0

您需要使用'CreateProcess'函數 - 這裏存在參數 - 'LPCTSTR lpCurrentDirectory' - 這正是您需要的內容 – RbMm

+3

第五個參數是啓動目錄:ShellExecute(NULL,L「open」, L「c:\\ pro \\ prog1.exe」,NULL,L「c:\\ pro \\」,SW_SHOWDEFAULT);' –

回答

1

ShellExecute中的第5個參數是啓動目錄。

或者"prog.exe"可以使用GetModuleFileNamePathRemoveFileSpec找到它自己的目錄,如評論中所建議的。

請注意,某些目錄(如"c:\\Program Files""c:\\Program Files (x86)")需要提升訪問權限以創建/修改/刪除文件(例如安裝期間)。沒有提升訪問權限的進程可以使用只讀標誌訪問受保護目錄中的文件。否則,如果請求寫入訪問,Windows會將路徑重定向到不同的目錄。

對於正常執行,* .exe應使用"Documents""AppData"文件夾來讀取/寫入數據。