|
@@ -1,13 +1,13 @@
|
|
|
#include "DeviceProduct.h"
|
|
|
DeviceProduct::DeviceProduct()
|
|
|
{
|
|
|
-
|
|
|
}
|
|
|
|
|
|
DeviceProduct::DeviceProduct(wstring ProductName)
|
|
|
{
|
|
|
m_ProductName = ProductName;
|
|
|
- OpenLocalMachineRootKey();
|
|
|
+ FindNETFramework();
|
|
|
+ OpenLocalMachineRootKey(RegeditCore::smPath_ProductsInfo.c_str());
|
|
|
}
|
|
|
|
|
|
DeviceProduct::~DeviceProduct()
|
|
@@ -25,49 +25,35 @@ wstring DeviceProduct::GetInstallLocation()
|
|
|
return m_InstallLocation;
|
|
|
}
|
|
|
|
|
|
-bool DeviceProduct::OpenLocalMachineRootKey()
|
|
|
-{
|
|
|
- long lRet;
|
|
|
- HKEY hKey;
|
|
|
- LPCTSTR lpSubKey;
|
|
|
-
|
|
|
- lpSubKey = RegeditCore::smPath_ProductsInfo.c_str();
|
|
|
- lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_READ | KEY_WOW64_64KEY, &hKey);
|
|
|
- bool state = false;
|
|
|
|
|
|
- if (lRet == ERROR_SUCCESS)
|
|
|
- {
|
|
|
- state = SearchAllProducts(hKey);
|
|
|
- }
|
|
|
-
|
|
|
- return state;
|
|
|
+wstring DeviceProduct::GetNETVersion()
|
|
|
+{
|
|
|
+ return m_NETVersion;
|
|
|
}
|
|
|
|
|
|
+wstring DeviceProduct::GetNETTargetVersion()
|
|
|
+{
|
|
|
+ return m_NETTargetVersion;
|
|
|
+}
|
|
|
|
|
|
-bool DeviceProduct::OpenLocalMachineSubKey(std::wstring AppKey)
|
|
|
+bool DeviceProduct::OpenLocalMachineRootKey(LPCTSTR productsInfoPath)
|
|
|
{
|
|
|
- bool state = false;
|
|
|
long lRet;
|
|
|
HKEY hKey;
|
|
|
LPCTSTR lpSubKey;
|
|
|
-
|
|
|
- AppKey = RegeditCore::smPath_ProductsInfo + L"\\" + AppKey;
|
|
|
- lpSubKey = AppKey.c_str();
|
|
|
+ lpSubKey = productsInfoPath;
|
|
|
lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_READ | KEY_WOW64_64KEY, &hKey);
|
|
|
-
|
|
|
+ bool state = false;
|
|
|
+
|
|
|
if (lRet == ERROR_SUCCESS)
|
|
|
{
|
|
|
- state = FindProductInfo(hKey, lpSubKey);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- m_Version = L"";
|
|
|
+ state = SearchAllProducts(hKey, lpSubKey);
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
return state;
|
|
|
}
|
|
|
|
|
|
-bool DeviceProduct::SearchAllProducts(HKEY hKey)
|
|
|
+bool DeviceProduct::SearchAllProducts(HKEY hKey, LPCTSTR productsInfoPath)
|
|
|
{
|
|
|
bool state = false;
|
|
|
DWORD index = 0;
|
|
@@ -83,6 +69,8 @@ bool DeviceProduct::SearchAllProducts(HKEY hKey)
|
|
|
|
|
|
if (!strBuffer.empty())
|
|
|
{
|
|
|
+ wstring productsInfo(productsInfoPath);
|
|
|
+ strBuffer = productsInfo + L"\\" + strBuffer;
|
|
|
state = OpenLocalMachineSubKey(strBuffer);
|
|
|
|
|
|
if (state)
|
|
@@ -99,6 +87,30 @@ bool DeviceProduct::SearchAllProducts(HKEY hKey)
|
|
|
}
|
|
|
|
|
|
|
|
|
+bool DeviceProduct::OpenLocalMachineSubKey(std::wstring AppKey)
|
|
|
+{
|
|
|
+ bool state = false;
|
|
|
+ long lRet;
|
|
|
+ HKEY hKey;
|
|
|
+ LPCTSTR lpSubKey;
|
|
|
+
|
|
|
+ //AppKey = RegeditCore::smPath_ProductsInfo + L"\\" + AppKey;
|
|
|
+ lpSubKey = AppKey.c_str();
|
|
|
+ lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, 0, KEY_READ | KEY_WOW64_64KEY, &hKey);
|
|
|
+
|
|
|
+ if (lRet == ERROR_SUCCESS)
|
|
|
+ {
|
|
|
+ state = FindProductInfo(hKey, lpSubKey);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_Version = L"";
|
|
|
+ }
|
|
|
+
|
|
|
+ return state;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
bool DeviceProduct::FindProductInfo(HKEY hKey, LPCTSTR lpSubKey)
|
|
|
{
|
|
|
bool state = false;
|
|
@@ -129,19 +141,19 @@ bool DeviceProduct::FindProductInfo(HKEY hKey, LPCTSTR lpSubKey)
|
|
|
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strMidReg.c_str(), 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hkRKey) == ERROR_SUCCESS)
|
|
|
{
|
|
|
RegQueryValueEx(hkRKey, L"DisplayName", 0, &dwType, (LPBYTE)szBufferAppInfo, &dwNameLen);
|
|
|
-
|
|
|
wstring displayNameTemp(szBufferAppInfo);
|
|
|
+ dwNameLen = 255;
|
|
|
+ memset(szBufferAppInfo, 0, 255);
|
|
|
|
|
|
if (displayNameTemp == m_ProductName)
|
|
|
{
|
|
|
RegQueryValueEx(hkRKey, L"DisplayVersion", 0, &dwType, (LPBYTE)szBufferAppInfo, &dwNameLen);
|
|
|
-
|
|
|
wstring displayVersionTemp(szBufferAppInfo);
|
|
|
-
|
|
|
m_Version = displayVersionTemp;
|
|
|
+ dwNameLen = 255;
|
|
|
+ memset(szBufferAppInfo, 0, 255);
|
|
|
|
|
|
RegQueryValueEx(hkRKey, L"InstallLocation", 0, &dwType, (LPBYTE)szBufferAppInfo, &dwNameLen);
|
|
|
-
|
|
|
wstring installLocationTemp(szBufferAppInfo);
|
|
|
m_InstallLocation = installLocationTemp;
|
|
|
|
|
@@ -163,3 +175,34 @@ bool DeviceProduct::FindProductInfo(HKEY hKey, LPCTSTR lpSubKey)
|
|
|
}
|
|
|
return state;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+bool DeviceProduct::FindNETFramework()
|
|
|
+{
|
|
|
+ HKEY hkRKey;
|
|
|
+ TCHAR szBufferAppInfo[255] = { 0 };
|
|
|
+ DWORD dwNameLen = 255;
|
|
|
+ DWORD dwType = REG_BINARY | REG_DWORD | REG_EXPAND_SZ | REG_MULTI_SZ | REG_NONE | REG_SZ | REG_DWORD_LITTLE_ENDIAN | REG_DWORD_BIG_ENDIAN | REG_LINK | REG_RESOURCE_LIST | REG_FULL_RESOURCE_DESCRIPTOR | REG_RESOURCE_REQUIREMENTS_LIST | REG_QWORD_LITTLE_ENDIAN;
|
|
|
+
|
|
|
+ if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, RegeditCore::smPath_NETFrameworkInfo.c_str(), 0, KEY_READ | KEY_WOW64_64KEY, &hkRKey) == ERROR_SUCCESS)
|
|
|
+ {
|
|
|
+
|
|
|
+ RegQueryValueEx(hkRKey, L"TargetVersion", 0, &dwType, (LPBYTE)szBufferAppInfo, &dwNameLen);
|
|
|
+ wstring displayVersionTemp(szBufferAppInfo);
|
|
|
+ m_NETTargetVersion = displayVersionTemp;
|
|
|
+ dwNameLen = 255;
|
|
|
+ memset(szBufferAppInfo, 0, 255);
|
|
|
+
|
|
|
+ RegQueryValueEx(hkRKey, L"Version", 0, &dwType, (LPBYTE)szBufferAppInfo, &dwNameLen);
|
|
|
+ wstring installLocationTemp(szBufferAppInfo);
|
|
|
+ m_NETVersion = installLocationTemp;
|
|
|
+
|
|
|
+ dwNameLen = 255;
|
|
|
+ memset(szBufferAppInfo, 0, 255);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+
|
|
|
+}
|
|
|
+
|