在其目录中启动外部程序

时间:2016-11-24 09:49:35

标签: visual-studio winapi visual-c++ shellexecute

我需要从项目中启动外部程序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从其目录中运行它?

1 个答案:

答案 0 :(得分:1)

ShellExecute中的第5个参数是启动目录。

或者,"prog.exe"可以使用GetModuleFileNamePathRemoveFileSpec查找自己的目录,如评论中所示。

请注意,某些目录(如"c:\\Program Files""c:\\Program Files (x86)")需要提升对创建/修改/删除文件的访问权限(例如在安装期间)。没有提升访问权限的进程可以使用只读标志访问受保护目录中的文件。否则,如果请求写访问,Windows将把路径重定向到另一个目录。

对于正常执行,* .exe应使用"Documents""AppData"文件夹来读/写数据。