Shared register/unregister method
| 95 | |
| 96 | // Shared register/unregister method |
| 97 | STDAPI UpdateRegistration(BOOL state) { |
| 98 | HRESULT hr = OleInitialize(NULL); |
| 99 | BOOL oleInitialized = SUCCEEDED(hr); |
| 100 | if (hr != RPC_E_CHANGED_MODE && hr != CO_E_ALREADYINITIALIZED) { |
| 101 | CHECK_HR_OR_RETURN(L"OleInitialize"); |
| 102 | } |
| 103 | |
| 104 | LPWSTR installPath = NULL, filename = NULL, libid = NULL; |
| 105 | hr = GetInstallPath(&installPath); |
| 106 | CHECK_HR_OR_GOTO_END(L"GetInstallPath"); |
| 107 | |
| 108 | hr = GetOwnFileName(&filename); |
| 109 | CHECK_HR_OR_GOTO_END(L"GetOwnFileName"); |
| 110 | |
| 111 | // Register type library |
| 112 | if (state) { |
| 113 | CComPtr<ITypeLib> typeLib; |
| 114 | hr = LoadTypeLib(filename, &typeLib); |
| 115 | CHECK_HR_OR_GOTO_END(L"LoadTypeLib"); |
| 116 | |
| 117 | hr = RegisterTypeLib(typeLib, filename, NULL); |
| 118 | CHECK_HR_OR_GOTO_END(L"RegisterTypeLib"); |
| 119 | } else { |
| 120 | CComPtr<ITypeLib> typeLib; |
| 121 | hr = LoadRegTypeLib(LIBID_LegacyUpdateLib, 1, 0, LOCALE_NEUTRAL, &typeLib); |
| 122 | if (hr != TYPE_E_LIBNOTREGISTERED) { |
| 123 | CHECK_HR_OR_GOTO_END(L"LoadRegTypeLib"); |
| 124 | |
| 125 | TLIBATTR *attrs; |
| 126 | hr = typeLib->GetLibAttr(&attrs); |
| 127 | CHECK_HR_OR_GOTO_END(L"GetLibAttr"); |
| 128 | |
| 129 | hr = UnRegisterTypeLib(attrs->guid, attrs->wMajorVerNum, attrs->wMinorVerNum, attrs->lcid, attrs->syskind); |
| 130 | typeLib->ReleaseTLibAttr(attrs); |
| 131 | CHECK_HR_OR_GOTO_END(L"UnRegisterTypeLib"); |
| 132 | } |
| 133 | } |
| 134 | |
| 135 | // Set vars used for expansions |
| 136 | hr = StringFromCLSID(LIBID_LegacyUpdateLib, &libid); |
| 137 | CHECK_HR_OR_GOTO_END(L"StringFromCLSID"); |
| 138 | |
| 139 | SetEnvironmentVariable(L"APPID", APPID_LegacyUpdateLib); |
| 140 | SetEnvironmentVariable(L"LIBID", libid); |
| 141 | SetEnvironmentVariable(L"MODULE", filename); |
| 142 | SetEnvironmentVariable(L"INSTALLPATH", installPath); |
| 143 | |
| 144 | CoTaskMemFree(libid); |
| 145 | |
| 146 | // Main |
| 147 | if (state) { |
| 148 | RegistryEntry entries[] = { |
| 149 | {HKEY_CLASSES_ROOT, L"AppID\\%APPID%", NULL, REG_SZ, (LPVOID)L"Legacy Update Control"}, |
| 150 | {HKEY_CLASSES_ROOT, L"AppID\\%APPID%", L"DllSurrogate", REG_SZ, (LPVOID)L""}, |
| 151 | {HKEY_CLASSES_ROOT, L"AppID\\LegacyUpdate.dll", L"AppID", REG_SZ, (LPVOID)L"%APPID%"}, |
| 152 | {} |
| 153 | }; |
| 154 | hr = SetRegistryEntries(entries); |
no test coverage detected