关于C++相对路径与绝对路径的问题

我在MFC里写了一个运行外部exe程序的代码。里面用到了绝对路径。比如
ShellExecute(NULL, "open", "QSanguosha.exe", NULL, "C:\\A\\B\\Addins\\QSanguosha0224", SW_SHOW);在本机运行无误。
现在让它在其他人电脑上运行的话,由于其路径为C:\\D\\A\\B\\Addins\\QSanguosha0224,改程序不能被调用。请问我该怎么修改原代码中路径,以设置成相对路径,让MFC能在其他人电脑上正确运行。
已知其他人电脑上有公共的路径是B\\Addins\\QSanguosha0224,其前面的路径待定。另外我拷过去的是dll文件,不存在工程文件,也不可能把要执行的程序放到工程目录下。

首先 你这个B\\Addins\\QSanguosha0224路径,在不同电脑上可能不同
那么它和你运行的exe文件,即调用你dll的文件位置有什么关系吗? 如果有,那么就用他们之间的相对位置写相对路径,否则是没办法用相对路径的
绝对路径也可以用一些特殊的方式
比如,如果你这个QSanguosha.exe是装在系统路径下,比如program files这样的windows系统路径,可以用windows环境变量来确定位置
如果是安装的exe,那么注册表里面是不是有安装的位置呢? 通过查注册表来找exe路径也是一个思路

如果全不行,那么没办法,搜索吧。 从每个盘根目录开始找合适的文件夹和exe文件,然后运行追问

dll文件是某个软件A的一个com组件所需的文件,生成它就行了。该dll文件的作用就是使软件A中工具栏可以多一个按钮。至于该按钮的功能就是在OnClicked这个函数中加了
ShellExecute(NULL, "open", "QSanguosha.exe", NULL, "C:\\A\\B\\Addins\\QSanguosha0224", SW_SHOW);这个语句。

追答

这样的话,那就无法确定相对路径了,因为运行的位置和要定位的exe位置都是无法确定的

这样就只能采用绝对路径
下面几个方法你可以考虑一下
1.如果QSanguosha.exe是安装的,那么注册表里面应该有它的信息吧

可以通过查注册表确认
2. 如果注册表走不通,可以做交互。 即第一次点击这个按钮的时候,弹出对话框 请用户来设置路径,然后保存到指定的路径下,比如最常用的All Users\Application Data
这个也是很多软件保存私有数据的地方
3. 都不想做的话 那么只能靠暴力搜索了 第一次启动时搜索,或者com组件注册的时候就后台搜索,然后记录位置,以后直接引用就可以了

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-10
如果你不能保证他的文件.exe和你的程序不存在相对关系,是很难做到你的需求的。
如果它和你的程序在同一个文件夹,或者在下面的子文件夹,都很好办。

你这个问题,最省事省心的方法,
1)你做一个文本文件和你的程序放在同一文件夹;
2)该文本文件中写了你需要调用的文件的物理路径;
3)程序中读取文本文件,获取路径,然后再调用。

因为是文本文件,到了目标计算机上,你也很容易修改该文件。追问

我考到其他计算机中只有一个dll文件,如果我新建的文本文件跟它拷贝到别的计算机的同一目录下,dll能识别它么。

相似回答