Windows工程下关于静默更新代码的解读

文章详细描述了WindowsDLL中的igwInitialize函数如何在初始化过程中处理静默更新,包括检查许可证状态、路径设置、动态库加载以及更新操作的选择(下载或强制)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、sdologinentry.dll与sdologinentry64.dll动态库关于执行静默更新的解释

函数入口:int WINAPI igwInitialize(DWORD dwSdkVersion, const AppInfo* pAppInfo)

int WINAPI igwInitialize(DWORD dwSdkVersion, const AppInfo* pAppInfo)
{
	TRACET();

	TCHAR path[32768*2] = {0};
	DWORD len = GetEnvironmentVariable(_T("PATH"), path, _countof(path));

	TCHAR buffer[MAX_PATH] = {0};
	GetModuleFileName(g_hModule, buffer, _countof(buffer));

	_stprintf(path+len, _T(";%s\\..\\sdologin\\"), buffer);

	SetEnvironmentVariable(_T("PATH"), path);

	AppInfo* pInfo = (AppInfo*)pAppInfo;

	// Skip update process or not
	wchar_t buffer2[MAX_PATH] = {0};
	wchar_t path2[MAX_PATH*2] = {0};
	GetModuleFileNameW(g_hModule, buffer2, _countof(buffer2));
	swprintf_s(path2, _countof(path2), L"%s\\..\\sdologin\\", buffer2);

	LicenseManager::Initial(path2);
	bool bExpired = LicenseManager::GetInstance()->GetValue<bool>("Expiration");
	bool bSkipUpdate = LicenseManager::GetInstance()->GetValue<bool>("SkipUpdate");

	if (!(bExpired == false && bSkipUpdate == true))  // !(未过期 && 跳过更新)
	{
		if (Update::GetInstance()->CheckLocalVersion())
		{
			TRACEI(_T("igwInitialize DownloadUpdate"));

			if(!Update::GetInstance()->DownloadUpdate(pInfo->nAppID, pInfo->nAreaId, pInfo->nGroupId))
			{
				return SDOA_FALSE;
			}
		}
		else
		{
			TRACEI(_T("igwInitialize ForceUpdate"));

			if (!Update::GetInstance()->ForceUpdate(pInfo->nAppID, pInfo->nAreaId, pInfo->nGroupId))
			{
				return SDOA_FALSE;
			}
		}

	}
	
	GetModuleFileName(g_hModule, buffer, _countof(buffer));
#ifdef _WIN64
	sprintf(buffer + strlen(buffer) - strlen("sdologinentry64.dll"), "sdologin\\sdologinsdk64.dll");
#else
	sprintf(buffer + strlen(buffer) - strlen("sdologinentry.dll"), "sdologin\\sdologinsdk.dll");
#endif

	g_hSdoLogin = LoadLibraryEx(buffer, NULL, LOAD_WITH_ALTERED_SEARCH_PATH);
	//g_hSdoLogin = LoadLibrary(_T("sdologinsdk.dll"));

	LPigwInitialize pFun = (LPigwInitialize)GetProcAddress(g_hSdoLogin, "igwInitialize");
	if(pFun)
	{
		return pFun(dwSdkVersion, pAppInfo);
	}

	return SDOA_FALSE;
}
  • 这段代码是一个 Windows DLL 的入口函数 igwInitialize,用于初始化一个SDK,并且在初始化过程中进行了一些额外的操作。让我们逐步解释它:

    • 这段代码是一个 Windows DLL 的入口函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

森明帮大于黑虎帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值