【发布时间】:2016-11-24 09:49:34
【问题描述】:
我需要从我的项目中启动外部程序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 从其目录中运行它呢?
【问题讨论】:
-
为什么不使用 Process 类及其 ProcessStartInfo 支持类?有了它,您可以准确指定 WorkingDirectory
-
你需要使用
CreateProcess函数 - 这里存在参数 -LPCTSTR lpCurrentDirectory- 这正是你所需要的 -
第5个参数是启动目录:
ShellExecute(NULL, L"open", L"c:\\pro\\prog1.exe", NULL, L"c:\\pro\\", SW_SHOWDEFAULT); -
@Barmak Shemirani 如果您发布它,我已经准备好接受您的回答。
-
或者,如果 prog1.exe 在您的控制之下,您可以考虑改为修复它。不要让它从当前工作目录的相对路径中读取它的配置文件。相反,通过查询可执行映像的路径名来使用完全限定的路径。
标签: visual-studio winapi visual-c++ shellexecute