程序中慎用相对路径

问题引入

项目中需要集成其他团队做的一个带有界面的工具。使用该工具时碰到了如下问题:

直接双击这个工具的exe,可以正常启动。

通过程序调用,或者用Everything打开这个工具,工具可以启动,但是界面上的图标全部消失了。问题分析

打开命令行,执行目录切换到该exe目录下,然后调用该exe,正常启动。将执行目录切换到上上级目录,然后调用该exe,工具不能正常启动,图标全部消失。

通过分析,猜测该工具设置图标等资源文件时使用的是相对路径。验证

生成一个程序read_a.exe,该程序用来打开该exe目录下面的a.txt文件(使用相对路径"./a.txt"),正常打开a.txt输出“Ok”,打开失败输出“Failed”。

将a.txt放到read_a.exe的目录下面。通过命令行切换到该目录,执行该程序read_a.exe。程序可以正常运行,成功打开a.txt。

将执行目录切换到上一级,然后执行该exe。程序打开a.txt失败。

通过程序调用。

解决办法

在调用时,将程序的工作目录临时切换到被调用程序read_a.exe的目录。调用之后再将工作目录切换到原来的路径。在Windows平台下面可以使用APISetCurrentDirectory和GetCurrentDirectory。

输出

发表评论
留言与评论(共有 0 条评论)
   
验证码:

相关文章

推荐文章

'); })();