263 lines
8.2 KiB
C++
263 lines
8.2 KiB
C++
#include "HGUpgrade.h"
|
|
#include "base/HGDef.h"
|
|
#include "base/HGInc.h"
|
|
#include "version/HGVersion.h"
|
|
#if defined(HG_CMP_MSC)
|
|
#include <shellapi.h>
|
|
#include <tlhelp32.h>
|
|
#include <psapi.h>
|
|
#endif
|
|
|
|
bool AppIsRun(const std::string& appName)
|
|
{
|
|
if (appName == HGVERSION_APPNAME_SCANNER)
|
|
{
|
|
#if defined(HG_CMP_MSC)
|
|
|
|
std::wstring appPath;
|
|
|
|
#if defined(OEM_HANWANG)
|
|
std::wstring regName = L"SOFTWARE\\HanvonScan";
|
|
#elif defined(OEM_LISICHENG)
|
|
std::wstring regName = L"SOFTWARE\\LanxumScan";
|
|
#elif defined(OEM_CANGTIAN)
|
|
std::wstring regName = L"SOFTWARE\\CumtennScan";
|
|
#elif defined(OEM_ZHONGJING)
|
|
std::wstring regName = L"SOFTWARE\\MicrotekScan";
|
|
#elif defined(OEM_ZIGUANG)
|
|
std::wstring regName = L"SOFTWARE\\UniScan";
|
|
#else
|
|
std::wstring regName = L"SOFTWARE\\HuaGoScan";
|
|
#endif
|
|
|
|
HKEY hKey = nullptr;
|
|
RegOpenKeyExW(HKEY_LOCAL_MACHINE, regName.c_str(), 0, KEY_QUERY_VALUE, &hKey);
|
|
if (nullptr != hKey)
|
|
{
|
|
WCHAR szData[MAX_PATH] = { 0 };
|
|
DWORD cbData = MAX_PATH;
|
|
if (ERROR_SUCCESS == RegQueryValueExW(hKey, L"Application", nullptr, nullptr, (LPBYTE)szData, &cbData))
|
|
{
|
|
appPath = szData;
|
|
}
|
|
|
|
RegCloseKey(hKey);
|
|
}
|
|
|
|
if (appPath.empty())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
bool ret = false;
|
|
HANDLE hSnapshot = ::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
|
|
if (hSnapshot != INVALID_HANDLE_VALUE)
|
|
{
|
|
PROCESSENTRY32 pe;
|
|
pe.dwSize = sizeof(PROCESSENTRY32);
|
|
BOOL bFindFirstProcess = ::Process32First(hSnapshot, &pe);
|
|
if (bFindFirstProcess)
|
|
{
|
|
do
|
|
{
|
|
WCHAR exeFullPath[1024] = { 0 };
|
|
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, pe.th32ProcessID);
|
|
if (nullptr != hProcess)
|
|
{
|
|
::GetModuleFileNameExW(hProcess, NULL, exeFullPath, 1024);
|
|
::CloseHandle(hProcess);
|
|
}
|
|
|
|
if (0 == wcsicmp(exeFullPath, appPath.c_str()))
|
|
{
|
|
ret = true;
|
|
break;
|
|
}
|
|
|
|
} while (::Process32Next(hSnapshot, &pe));
|
|
}
|
|
|
|
::CloseHandle(hSnapshot);
|
|
}
|
|
|
|
return ret;
|
|
|
|
#else
|
|
std::string cmd;
|
|
std::string appPath;
|
|
|
|
std::string osName;
|
|
FILE *file = popen("cat /etc/issue | cut -d\' \' -f1", "r");
|
|
if (NULL != file)
|
|
{
|
|
char data[1024] = {0};
|
|
if (NULL != fgets(data, 1024, file))
|
|
osName = data;
|
|
pclose(file);
|
|
}
|
|
|
|
printf("osName=%s\n", osName.c_str());
|
|
if (osName.find("UnionTech") != std::string::npos)
|
|
{
|
|
#if defined(OEM_HANWANG)
|
|
cmd = "ps -wef | grep HanvonScan";
|
|
appPath = "/opt/apps/com.hanvonchina.hanvonscan/files/bin/HanvonScan";
|
|
#elif defined(OEM_LISICHENG)
|
|
cmd = "ps -wef | grep LanxumScan";
|
|
appPath = "/opt/apps/com.lanxumchina.lanxumscan/files/bin/LanxumScan";
|
|
#elif defined(OEM_CANGTIAN)
|
|
cmd = "ps -wef | grep CumtennScan";
|
|
appPath = "/opt/apps/com.cumtennchina.cumtennscan/files/bin/CumtennScan";
|
|
#elif defined(OEM_ZHONGJING)
|
|
cmd = "ps -wef | grep MicrotekScan";
|
|
appPath = "/opt/apps/com.microtekchina.microtekscan-ex/files/bin/MicrotekScan";
|
|
#elif defined(OEM_ZIGUANG)
|
|
cmd = "ps -wef | grep UniScan";
|
|
appPath = "/opt/apps/com.unischina.uniscan/files/bin/UniScan";
|
|
#else
|
|
cmd = "ps -wef | grep HuaGoScan";
|
|
appPath = "/opt/apps/com.huagaochina.huagoscan/files/bin/HuaGoScan";
|
|
#endif
|
|
}
|
|
else
|
|
{
|
|
#if defined(OEM_HANWANG)
|
|
cmd = "ps -wef | grep HanvonScan";
|
|
appPath = "/opt/apps/scanner-driver-hanvon/bin/HanvonScan";
|
|
#elif defined(OEM_LISICHENG)
|
|
cmd = "ps -wef | grep LanxumScan";
|
|
appPath = "/opt/apps/scanner-driver-lanxum/bin/LanxumScan";
|
|
#elif defined(OEM_CANGTIAN)
|
|
cmd = "ps -wef | grep CumtennScan";
|
|
appPath = "/opt/apps/scanner-driver-cumtenn/bin/CumtennScan";
|
|
#elif defined(OEM_ZHONGJING)
|
|
cmd = "ps -wef | grep MicrotekScan";
|
|
appPath = "/opt/apps/scanner-driver-microtek-ex/bin/MicrotekScan";
|
|
#elif defined(OEM_ZIGUANG)
|
|
cmd = "ps -wef | grep UniScan";
|
|
appPath = "/opt/apps/scanner-driver-unis/bin/UniScan";
|
|
#else
|
|
cmd = "ps -wef | grep HuaGoScan";
|
|
appPath = "/opt/apps/scanner-driver-huagao/bin/HuaGoScan";
|
|
#endif
|
|
}
|
|
|
|
bool ret = false;
|
|
FILE *fp = popen(cmd.c_str(), "r");
|
|
if (nullptr != fp)
|
|
{
|
|
char data[2048] = {0};
|
|
while (data == fgets(data, 2048, fp))
|
|
{
|
|
if (nullptr != strstr(data, appPath.c_str()))
|
|
{
|
|
ret = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
pclose(fp);
|
|
}
|
|
|
|
return ret;
|
|
|
|
#endif
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void RunApp(const std::string& appName)
|
|
{
|
|
if (appName == HGVERSION_APPNAME_SCANNER)
|
|
{
|
|
#if defined(HG_CMP_MSC)
|
|
|
|
std::wstring appPath;
|
|
|
|
#if defined(OEM_HANWANG)
|
|
std::wstring regName = L"SOFTWARE\\HanvonScan";
|
|
#elif defined(OEM_LISICHENG)
|
|
std::wstring regName = L"SOFTWARE\\LanxumScan";
|
|
#elif defined(OEM_CANGTIAN)
|
|
std::wstring regName = L"SOFTWARE\\CumtennScan";
|
|
#elif defined(OEM_ZHONGJING)
|
|
std::wstring regName = L"SOFTWARE\\MicrotekScan";
|
|
#elif defined(OEM_ZIGUANG)
|
|
std::wstring regName = L"SOFTWARE\\UniScan";
|
|
#else
|
|
std::wstring regName = L"SOFTWARE\\HuaGoScan";
|
|
#endif
|
|
|
|
HKEY hKey = nullptr;
|
|
RegOpenKeyExW(HKEY_LOCAL_MACHINE, regName.c_str(), 0, KEY_QUERY_VALUE, &hKey);
|
|
if (nullptr != hKey)
|
|
{
|
|
WCHAR szData[MAX_PATH] = { 0 };
|
|
DWORD cbData = MAX_PATH;
|
|
if (ERROR_SUCCESS == RegQueryValueExW(hKey, L"Application", nullptr, nullptr, (LPBYTE)szData, &cbData))
|
|
{
|
|
appPath = szData;
|
|
}
|
|
|
|
RegCloseKey(hKey);
|
|
}
|
|
|
|
if (!appPath.empty())
|
|
{
|
|
ShellExecuteW(nullptr, L"open", appPath.c_str(), nullptr, nullptr, SW_SHOW);
|
|
}
|
|
|
|
#else
|
|
std::string appPath;
|
|
|
|
std::string osName;
|
|
FILE *file = popen("cat /etc/issue | cut -d\' \' -f1", "r");
|
|
if (NULL != file)
|
|
{
|
|
char data[1024] = {0};
|
|
if (NULL != fgets(data, 1024, file))
|
|
osName = data;
|
|
pclose(file);
|
|
}
|
|
|
|
printf("osName=%s\n", osName.c_str());
|
|
if (osName.find("UnionTech") != std::string::npos)
|
|
{
|
|
#if defined(OEM_HANWANG)
|
|
appPath = "sh /opt/apps/com.hanvonchina.hanvonscan/files/bin/HanvonScan.sh &";
|
|
#elif defined(OEM_LISICHENG)
|
|
appPath = "sh /opt/apps/com.lanxumchina.lanxumscan/files/bin/LanxumScan.sh &";
|
|
#elif defined(OEM_CANGTIAN)
|
|
appPath = "sh /opt/apps/com.cumtennchina.cumtennscan/files/bin/CumtennScan.sh &";
|
|
#elif defined(OEM_ZHONGJING)
|
|
appPath = "sh /opt/apps/com.microtekchina.microtekscan-ex/files/bin/MicrotekScan.sh &";
|
|
#elif defined(OEM_ZIGUANG)
|
|
appPath = "sh /opt/apps/com.unischina.uniscan/files/bin/UniScan.sh &";
|
|
#else
|
|
appPath = "sh /opt/apps/com.huagaochina.huagoscan/files/bin/HuaGoScan.sh &";
|
|
#endif
|
|
}
|
|
else
|
|
{
|
|
#if defined(OEM_HANWANG)
|
|
appPath = "sh /opt/apps/scanner-driver-hanvon/bin/HanvonScan.sh &";
|
|
#elif defined(OEM_LISICHENG)
|
|
appPath = "sh /opt/apps/scanner-driver-lanxum/bin/LanxumScan.sh &";
|
|
#elif defined(OEM_CANGTIAN)
|
|
appPath = "sh /opt/apps/scanner-driver-cumtenn/bin/CumtennScan.sh &";
|
|
#elif defined(OEM_ZHONGJING)
|
|
appPath = "sh /opt/apps/scanner-driver-microtek-ex/bin/MicrotekScan.sh &";
|
|
#elif defined(OEM_ZIGUANG)
|
|
appPath = "sh /opt/apps/scanner-driver-unis/bin/UniScan.sh &";
|
|
#else
|
|
appPath = "sh /opt/apps/scanner-driver-huagao/bin/HuaGoScan.sh &";
|
|
#endif
|
|
}
|
|
|
|
system(appPath.c_str());
|
|
|
|
#endif
|
|
}
|
|
}
|