【提问】怎样用一种嵌套路径访问两个不同的路径,具体请看详细描述。

xuyong437 2017-08-16 11:41:01
各位大牛,我这边在做项目的时候遇到一个问题:

一个软件,想兼容不同的系统这两个系统的注册表路径是不同的,但是代码中要求以一个逻辑路径去表示,如:

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,谢谢各位大牛了~~
...全文
283 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuyong437 2017-08-22
  • 打赏
  • 举报
回复
引用 5 楼 X-i-n的回复:
这是五六行代码的事吧?取注册表值,做个if判断就完成啦。
呃呃呃…修改点很多的
X-i-n 2017-08-17
  • 打赏
  • 举报
回复
直接传变量进去。 准备一套全局变量,两套值。程序运行以后,先判断系统版本,根据不同版本,赋其中一套值
X-i-n 2017-08-17
  • 打赏
  • 举报
回复
这是五六行代码的事吧?取注册表值,做个if判断就完成啦。
xuyong437 2017-08-17
  • 打赏
  • 举报
回复
引用 3 楼 X-i-n的回复:
注册表里找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion 键ProductName的值是Friendly Name,比如 Windows 10 Enterprise,或者 Windows Server 2008 R2 Standard,根据这个直接判断操作系统 键CurrentVersion的值是内核版号,比如6.3,6.1,根据这个判断操作系统代数

5.0	2000
5.1	XP
5.2	2003/2003R2
6.0	vista/2008
6.1	win7/2008R2
6.2	win8/2012
6.3	win8.1/win10/2012R2
键CurrentBuild是Build版号,比如15063,根据这个判断操作系统Patch版号
你这个方案是可行的~,通过区分系统来写路径,但是领导觉得这个方案太复杂……,难受…
X-i-n 2017-08-17
  • 打赏
  • 举报
回复
注册表里找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion 键ProductName的值是Friendly Name,比如 Windows 10 Enterprise,或者 Windows Server 2008 R2 Standard,根据这个直接判断操作系统 键CurrentVersion的值是内核版号,比如6.3,6.1,根据这个判断操作系统代数

5.0	2000
5.1	XP
5.2	2003/2003R2
6.0	vista/2008
6.1	win7/2008R2
6.2	win8/2012
6.3	win8.1/win10/2012R2
键CurrentBuild是Build版号,比如15063,根据这个判断操作系统Patch版号
xuyong437 2017-08-17
  • 打赏
  • 举报
回复
引用 1 楼 X-i-n的回复:
直接传变量进去。 准备一套全局变量,两套值。程序运行以后,先判断系统版本,根据不同版本,赋其中一套值
怎么判断系统??需要区分的是windows2008和windows2012,查询注册表么,但是我在网上找的信息是只能查同一种系统的不同版本号,还是不知道怎么区分不同的系统

6,850

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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