各位大牛,我這邊在做專案的時候遇到一個問題:
一個軟體,想兼容不同的系統這兩個系統的注冊表路徑是不同的,但是代碼中要求以一個邏輯路徑去表示,如:
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,謝謝各位大牛了~~
uj5u.com熱心網友回復:
直接傳變數進去。準備一套全域變數,兩套值。程式運行以后,先判斷系統版本,根據不同版本,賦其中一套值
uj5u.com熱心網友回復:
怎么判斷系統??需要區分的是windows2008和windows2012,查詢注冊表么,但是我在網上找的資訊是只能查同一種系統的不同版本號,還是不知道怎么區分不同的系統
uj5u.com熱心網友回復:
注冊表里找到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版號
uj5u.com熱心網友回復:
你這個方案是可行的~,通過區分系統來寫路徑,但是領導覺得這個方案太復雜……,難受…


uj5u.com熱心網友回復:
這是五六行代碼的事吧?取注冊表值,做個if判斷就完成啦。
uj5u.com熱心網友回復:
呃呃呃…修改點很多的
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/109779.html
上一篇:win10 下cmd啟動方式不同,樣式不一致的問題?
下一篇:未能從程式集中加載dpi
