程序开机启动的问题

sk19891117 2009-07-13 04:47:24
就是本人做了个小东西 让它开机启动 写入注册表的Software\\Microsoft\\Windows\\CurrentVersion\\Run里面 开机后确实是启动了 但是读不到配置文件了 看了 一下注册表里的路径没错 手动点击启动时可以读到配置文件 想问下各位大侠到底这是什么原因呢。。。。。多谢了
...全文
44 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
sk19891117 2009-07-14
  • 打赏
  • 举报
回复
恩 我把那个配置文件的路径改了就好了 呵呵幸苦各位了啊
doudouHuY 2009-07-13
  • 打赏
  • 举报
回复
应该是你程序被调用时当前目录不是你程序可执行文件所在的目录。
用GetModuleFileName
老邓 2009-07-13
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 The_facE 的回复:]
不要用GetCurrentDirectory那个函数,这个函数很有问题。

用GetModuleFileName,然后再把.exe文件名截掉。
[/Quote]
hearoequal 2009-07-13
  • 打赏
  • 举报
回复
GetCurrentDirectory得到的路径是个共享的系统参数
比如说你这个程序有个GetCurrentDirectory函数
但是还没执行到这个函数
但是其他的一个程序运行了(注意 只是运行都有可能)
你通过GetCurrentDirectory获得的路径就已经不是你程序所在的目录了
sk19891117 2009-07-13
  • 打赏
  • 举报
回复
要下线了 我回去都试一下啊 谢谢各位了
sk19891117 2009-07-13
  • 打赏
  • 举报
回复
这样写的话 那配置文件还用写进去么?
hearoequal 2009-07-13
  • 打赏
  • 举报
回复
GetModuleFileName( NULL, buf, sizeof( buf ) ); //取进程 的绝对路径 包括程序全称 如: C:\\TEST\MAIN.EXE
PathRemoveFileSpec(buf); //去掉最后面的 程序名字

include那个是第2个函数调用需要加的
sk19891117 2009-07-13
  • 打赏
  • 举报
回复
#include <shlwapi.h>
#pragma comment (lib,"shlwapi.lib")


这是干嘛啊
hearoequal 2009-07-13
  • 打赏
  • 举报
回复
对了前面是

#include <shlwapi.h>
#pragma comment (lib,"shlwapi.lib")
sk19891117 2009-07-13
  • 打赏
  • 举报
回复
不把后缀写进去?
hearoequal 2009-07-13
  • 打赏
  • 举报
回复
如果是使用GetCurrentDirectory的当前路径问题


GetModuleFileName( NULL, buf, sizeof( buf ) );
PathRemoveFileSpec(buf);
替换试试
这个是取进程绝对路径
The_facE 2009-07-13
  • 打赏
  • 举报
回复
不要用GetCurrentDirectory那个函数,这个函数很有问题。

用GetModuleFileName,然后再把.exe文件名截掉。
sk19891117 2009-07-13
  • 打赏
  • 举报
回复
首先是用的相对路劲啊 后来又改为
char CurrentPath[MAX_PATH];
long ret;
LPSTR FileNewName;
LPSTR FileCurrentName;
DWORD type=REG_SZ;
DWORD size=MAX_PATH;
GetCurrentDirectory(MAX_PATH,CurrentPath);
FileCurrentName = lstrcat(CurrentPath,"\\sk.ini"); 这样了 还是不行 可能是七楼说的那种情况吧
The_facE 2009-07-13
  • 打赏
  • 举报
回复
你在程序里是怎么找到配置文件的?用了GetCurrentDirectory函数吗?
如果是,那么把这个函数换掉。
xiazaizhezhanghao 2009-07-13
  • 打赏
  • 举报
回复
这个是这样的 你的程序路径写到注册表中后 它会把你的程序靠到另外一个目录中再调用你的程序 所以你需要把配置文件也写进去才行
sk19891117 2009-07-13
  • 打赏
  • 举报
回复
呵呵 好像还是不行哦
sk19891117 2009-07-13
  • 打赏
  • 举报
回复
哦 你的意思是这样的吧 就是在我读配置文件的时候就是那样读 而不是用相对路径读是吧
等下回去试一下看能行不
sk19891117 2009-07-13
  • 打赏
  • 举报
回复
也要把配置文件写到注册表中么? 是不是也是写到Software\\Microsoft\\Windows\\CurrentVersion\\Run里面?
大前置 2009-07-13
  • 打赏
  • 举报
回复

这只是你程序的路径,不是配置文件的路径

TCHAR buf[256];
memset(buf, 0, sizeof(buf));
GetCurrentDirectory(256, buf);

buf是程序目录,再加上你的配置文件名,作为配置文件绝对路径就可以了
sk19891117 2009-07-13
  • 打赏
  • 举报
回复
起始目录不一样?? 可我看了注册表啊 是绝对路径 那如果要是目录不一样 怎么解决呢
加载更多回复(1)

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧