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

我在MFC里写了一个运行外部exe程序的代码。里面用到了绝对路径。比如ShellExecute(NULL,"open","QSanguosha.exe",NULL,"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文件,不存在工程文件,也不可能把要执行的程序放到工程目录下。
展开
 我来答
风若远去何人留
推荐于2016-08-08 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450126
专业C/C++软件开发

向TA提问 私信TA
展开全部
首先 你这个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组件注册的时候就后台搜索,然后记录位置,以后直接引用就可以了
mafangsan
2013-09-10 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1万
采纳率:71%
帮助的人:2573万
展开全部
如果你不能保证他的文件.exe和你的程序不存在相对关系,是很难做到你的需求的。
如果它和你的程序在同一个文件夹,或者在下面的子文件夹,都很好办。

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

因为是文本文件,到了目标计算机上,你也很容易修改该文件。
追问
我考到其他计算机中只有一个dll文件,如果我新建的文本文件跟它拷贝到别的计算机的同一目录下,dll能识别它么。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式