各位大牛,我这边在做项目的时候遇到一个问题:
一个软件,想兼容不同的系统这两个系统的注册表路径是不同的,但是代码中要求以一个逻辑路径去表示,如:
a系统,注册表路径为:/SOFTWARE/WcndFn/Ulter
b系统,注册表路径为:/SOFTWARE/Ulter
实际上a、b系统注册表路径就差了一级文件夹,a系统多了一级WcndFn文件夹。但是代码中要求要以一个逻辑路径去访问这两个不同的路径。使用的是windows API函数 RegOpenKeyEx,函数如下:
LONG RegOpenKeyEx(
HKEY hKey, // 需要打开的主键的名称
LPCTSTR lpSubKey, //需要打开的子键的名称
DWORD ulOptions, // 保留,设为0
REGSAM samDesired, // 安全访问标记,也就是权限
PHKEY phkResult // 得到的将要打开键的句柄
)
原本程序只需要在a系统上运行,那么 RegOpenKeyEx 的第二个参数只需要传入 "//SOFTWARE//WcndFn//Ulter" 就可以了,但是现在要求程序要兼容b系统。那原来这种方式就不行了,在b系统上就找不到相应的注册表路径,因为代码中写的是绝对路径,只能访问和a系统注册表一样的路径。
现在想把原来 “//SOFTWARE//WcndFn//Ulter” 这个字符串修改成为一个逻辑路径的表示方式,然后传给 RegOpenKeyEx ,这样在a系统上能找到 /SOFTWARE/WcndFn/Ulter ,并且在b系统上能找到 /SOFTWARE/Ulter 。
应该怎样去构造这个字符串啊或者说怎样构造这样的一个路径,可以兼容这两种情况?要求不让用区分系统的方式来传入不同的路径,只能用一个 逻辑路径或者相对路径。
程序是用C/C++写的,不能用正则表达式啊,系统是windows的两种不同的系统。
求各位大神给一个合理的方案~~~,在网上找不到一个合理的方案。 T_T,谢谢各位大牛了~~
没有这样的api,只能你自己先检测是哪种系统,比如根据某个特征判断,或遍历搜索
然后再用字符串拼接你的注册表键的路径
函数现在当前系统是A,还是B,然后在确定使用那个注册表。。。不然那就去统一注册表路径。。。