消息关闭
    暂无新消息!
各位大牛,我这边在做项目的时候遇到一个问题:

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

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,谢谢各位大牛了~~

3个回答

︿ 2
注册表里找到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版号
︿ 0
直接传变量进去。
准备一套全局变量,两套值。程序运行以后,先判断系统版本,根据不同版本,赋其中一套值