DWORD WINAPI thread_installation(LPVOID param) { InstallEngine *This = param; ICifComponent *comp; HRESULT hr; if (This->callback) IInstallEngineCallback_OnStartInstall(This->callback, This->thread.download_size, This->thread.install_size); for (;;) { hr = get_next_component(This->thread.enum_comp, This->thread.operation, &comp); if (FAILED(hr)) break; if (hr == S_FALSE) { hr = S_OK; break; } hr = process_component(This, comp); if (FAILED(hr)) break; } if (This->callback) IInstallEngineCallback_OnStopInstall(This->callback, hr, NULL, 0); IEnumCifComponents_Release(This->thread.enum_comp); IInstallEngine2_Release(&This->IInstallEngine2_iface); set_status(This, ENGINESTATUS_READY); return 0; }
//----------------------------------------------------------------------------------------- void process_elements(XmlElement::XmlSet::const_iterator itr, const Components& components, const int depth, ostream& outf) { if ((*itr)->GetTag() == "field") output_field(**itr, depth, outf); else if ((*itr)->GetTag() == "component") process_component(**itr, components, depth, outf); else if ((*itr)->GetTag() == "group") process_group(**itr, components, depth, outf); }