我需要从项目中启动外部程序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 :(得分:1)
ShellExecute
中的第5个参数是启动目录。
或者,"prog.exe"
可以使用GetModuleFileName
和PathRemoveFileSpec
查找自己的目录,如评论中所示。
请注意,某些目录(如"c:\\Program Files"
和"c:\\Program Files (x86)"
)需要提升对创建/修改/删除文件的访问权限(例如在安装期间)。没有提升访问权限的进程可以使用只读标志访问受保护目录中的文件。否则,如果请求写访问,Windows将把路径重定向到另一个目录。
对于正常执行,* .exe应使用"Documents"
或"AppData"
文件夹来读/写数据。