最近测试反馈Win10设置我们的应用不正常,经google查询,由于Win10设置了hash校验设置的ProgId值,如果hash正确才能正常启动,所以我们必须得调用Win8/Win10 Api去正确设置。
举例:
#include <ShObjIdl.h>
bool SetDefaultClient(wchar_t* pClientName)
{
IApplicationAssociationRegistration* pARR;
HRESULT hr = CoCreateInstance(CLSID_ApplicationAssociationRegistration, NULL, CLSCTX_INPROC, __uuidof(IApplicationAssociationRegistration), (void**)&pARR);
if (SUCCEEDED(rv))
{
BOOL bIsDefaultClient = FALSE;
hr = pAAR->QueryAppIsDefault(L"http", AT_URLPROTOCOL, AL_EFFECTIVE, pClientName, &bIsDefaultClient);
if (FAILED(hr) || bIsDefaultClient == FALSE)
{
hr = pAAR->SetAppAsDefault(pClientName, L"http", AT_URLPROTOCOL);
}
pAAR->Release();
}
return SUCCEEDED(hr);
}
要注意的是,若API返回成功,在默认程序中不一定看到是你设置的App,因为写的注册表不一定为CURRENTUSER,但是功能是正常的。