diff options
| author | Nir Bar <nir.bar@panel-sw.co.il> | 2021-08-12 14:16:01 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-08-12 14:50:55 -0500 |
| commit | bb18c9c4f0e6da640775b85ebda68b31f2b391ed (patch) | |
| tree | 5ce6107321293f7af7a0504588e3d0c6642472ff /src/burn/engine/package.cpp | |
| parent | 0042e3d4554a0d92e1da6141854b0f1aafa07d5b (diff) | |
| download | wix-bb18c9c4f0e6da640775b85ebda68b31f2b391ed.tar.gz wix-bb18c9c4f0e6da640775b85ebda68b31f2b391ed.tar.bz2 wix-bb18c9c4f0e6da640775b85ebda68b31f2b391ed.zip | |
Set the log file path for MSI transactions.
Diffstat (limited to 'src/burn/engine/package.cpp')
| -rw-r--r-- | src/burn/engine/package.cpp | 62 |
1 files changed, 30 insertions, 32 deletions
diff --git a/src/burn/engine/package.cpp b/src/burn/engine/package.cpp index cd871bc5..bea48cb5 100644 --- a/src/burn/engine/package.cpp +++ b/src/burn/engine/package.cpp | |||
| @@ -36,6 +36,7 @@ extern "C" HRESULT PackagesParseFromXml( | |||
| 36 | BSTR bstrNodeName = NULL; | 36 | BSTR bstrNodeName = NULL; |
| 37 | DWORD cMspPackages = 0; | 37 | DWORD cMspPackages = 0; |
| 38 | LPWSTR scz = NULL; | 38 | LPWSTR scz = NULL; |
| 39 | BOOL fFoundXml = FALSE; | ||
| 39 | 40 | ||
| 40 | // select rollback boundary nodes | 41 | // select rollback boundary nodes |
| 41 | hr = XmlSelectNodes(pixnBundle, L"RollbackBoundary", &pixnNodes); | 42 | hr = XmlSelectNodes(pixnBundle, L"RollbackBoundary", &pixnNodes); |
| @@ -63,15 +64,19 @@ extern "C" HRESULT PackagesParseFromXml( | |||
| 63 | 64 | ||
| 64 | // @Id | 65 | // @Id |
| 65 | hr = XmlGetAttributeEx(pixnNode, L"Id", &pRollbackBoundary->sczId); | 66 | hr = XmlGetAttributeEx(pixnNode, L"Id", &pRollbackBoundary->sczId); |
| 66 | ExitOnFailure(hr, "Failed to get @Id."); | 67 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Id."); |
| 67 | 68 | ||
| 68 | // @Vital | 69 | // @Vital |
| 69 | hr = XmlGetYesNoAttribute(pixnNode, L"Vital", &pRollbackBoundary->fVital); | 70 | hr = XmlGetYesNoAttribute(pixnNode, L"Vital", &pRollbackBoundary->fVital); |
| 70 | ExitOnFailure(hr, "Failed to get @Vital."); | 71 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Vital."); |
| 71 | 72 | ||
| 72 | // @Transaction | 73 | // @Transaction |
| 73 | hr = XmlGetYesNoAttribute(pixnNode, L"Transaction", &pRollbackBoundary->fTransactionAuthored); | 74 | hr = XmlGetYesNoAttribute(pixnNode, L"Transaction", &pRollbackBoundary->fTransactionAuthored); |
| 74 | ExitOnFailure(hr, "Failed to get @Transaction."); | 75 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Transaction."); |
| 76 | |||
| 77 | // @LogPathVariable | ||
| 78 | hr = XmlGetAttributeEx(pixnNode, L"LogPathVariable", &pRollbackBoundary->sczLogPathVariable); | ||
| 79 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @LogPathVariable."); | ||
| 75 | 80 | ||
| 76 | // prepare next iteration | 81 | // prepare next iteration |
| 77 | ReleaseNullObject(pixnNode); | 82 | ReleaseNullObject(pixnNode); |
| @@ -110,11 +115,13 @@ extern "C" HRESULT PackagesParseFromXml( | |||
| 110 | 115 | ||
| 111 | // @Id | 116 | // @Id |
| 112 | hr = XmlGetAttributeEx(pixnNode, L"Id", &pPackage->sczId); | 117 | hr = XmlGetAttributeEx(pixnNode, L"Id", &pPackage->sczId); |
| 113 | ExitOnFailure(hr, "Failed to get @Id."); | 118 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Id."); |
| 114 | 119 | ||
| 115 | // @Cache | 120 | // @Cache |
| 116 | hr = XmlGetAttributeEx(pixnNode, L"Cache", &scz); | 121 | hr = XmlGetAttributeEx(pixnNode, L"Cache", &scz); |
| 117 | if (SUCCEEDED(hr)) | 122 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @Cache."); |
| 123 | |||
| 124 | if (fFoundXml) | ||
| 118 | { | 125 | { |
| 119 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"remove", -1)) | 126 | if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, 0, scz, -1, L"remove", -1)) |
| 120 | { | 127 | { |
| @@ -134,72 +141,62 @@ extern "C" HRESULT PackagesParseFromXml( | |||
| 134 | ExitOnRootFailure(hr, "Invalid cache type: %ls", scz); | 141 | ExitOnRootFailure(hr, "Invalid cache type: %ls", scz); |
| 135 | } | 142 | } |
| 136 | } | 143 | } |
| 137 | ExitOnFailure(hr, "Failed to get @Cache."); | ||
| 138 | 144 | ||
| 139 | // @CacheId | 145 | // @CacheId |
| 140 | hr = XmlGetAttributeEx(pixnNode, L"CacheId", &pPackage->sczCacheId); | 146 | hr = XmlGetAttributeEx(pixnNode, L"CacheId", &pPackage->sczCacheId); |
| 141 | ExitOnFailure(hr, "Failed to get @CacheId."); | 147 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @CacheId."); |
| 142 | 148 | ||
| 143 | // @Size | 149 | // @Size |
| 144 | hr = XmlGetAttributeUInt64(pixnNode, L"Size", &pPackage->qwSize); | 150 | hr = XmlGetAttributeUInt64(pixnNode, L"Size", &pPackage->qwSize); |
| 145 | ExitOnFailure(hr, "Failed to get @Size."); | 151 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @Size."); |
| 146 | 152 | ||
| 147 | // @InstallSize | 153 | // @InstallSize |
| 148 | hr = XmlGetAttributeUInt64(pixnNode, L"InstallSize", &pPackage->qwInstallSize); | 154 | hr = XmlGetAttributeUInt64(pixnNode, L"InstallSize", &pPackage->qwInstallSize); |
| 149 | ExitOnFailure(hr, "Failed to get @InstallSize."); | 155 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @InstallSize."); |
| 150 | 156 | ||
| 151 | // @PerMachine | 157 | // @PerMachine |
| 152 | hr = XmlGetYesNoAttribute(pixnNode, L"PerMachine", &pPackage->fPerMachine); | 158 | hr = XmlGetYesNoAttribute(pixnNode, L"PerMachine", &pPackage->fPerMachine); |
| 153 | ExitOnFailure(hr, "Failed to get @PerMachine."); | 159 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @PerMachine."); |
| 154 | 160 | ||
| 155 | // @Permanent | 161 | // @Permanent |
| 156 | hr = XmlGetYesNoAttribute(pixnNode, L"Permanent", &pPackage->fUninstallable); | 162 | hr = XmlGetYesNoAttribute(pixnNode, L"Permanent", &pPackage->fUninstallable); |
| 157 | ExitOnFailure(hr, "Failed to get @Permanent."); | 163 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Permanent."); |
| 158 | pPackage->fUninstallable = !pPackage->fUninstallable; // TODO: change "Uninstallable" variable name to permanent, until then Uninstallable is the opposite of Permanent so fix the variable. | 164 | pPackage->fUninstallable = !pPackage->fUninstallable; // TODO: change "Uninstallable" variable name to permanent, until then Uninstallable is the opposite of Permanent so fix the variable. |
| 159 | pPackage->fCanAffectRegistration = pPackage->fUninstallable; | 165 | pPackage->fCanAffectRegistration = pPackage->fUninstallable; |
| 160 | 166 | ||
| 161 | // @Vital | 167 | // @Vital |
| 162 | hr = XmlGetYesNoAttribute(pixnNode, L"Vital", &pPackage->fVital); | 168 | hr = XmlGetYesNoAttribute(pixnNode, L"Vital", &pPackage->fVital); |
| 163 | ExitOnFailure(hr, "Failed to get @Vital."); | 169 | ExitOnRequiredXmlQueryFailure(hr, "Failed to get @Vital."); |
| 164 | 170 | ||
| 165 | // @LogPathVariable | 171 | // @LogPathVariable |
| 166 | hr = XmlGetAttributeEx(pixnNode, L"LogPathVariable", &pPackage->sczLogPathVariable); | 172 | hr = XmlGetAttributeEx(pixnNode, L"LogPathVariable", &pPackage->sczLogPathVariable); |
| 167 | if (E_NOTFOUND != hr) | 173 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @LogPathVariable."); |
| 168 | { | ||
| 169 | ExitOnFailure(hr, "Failed to get @LogPathVariable."); | ||
| 170 | } | ||
| 171 | 174 | ||
| 172 | // @RollbackLogPathVariable | 175 | // @RollbackLogPathVariable |
| 173 | hr = XmlGetAttributeEx(pixnNode, L"RollbackLogPathVariable", &pPackage->sczRollbackLogPathVariable); | 176 | hr = XmlGetAttributeEx(pixnNode, L"RollbackLogPathVariable", &pPackage->sczRollbackLogPathVariable); |
| 174 | if (E_NOTFOUND != hr) | 177 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @RollbackLogPathVariable."); |
| 175 | { | ||
| 176 | ExitOnFailure(hr, "Failed to get @RollbackLogPathVariable."); | ||
| 177 | } | ||
| 178 | 178 | ||
| 179 | // @InstallCondition | 179 | // @InstallCondition |
| 180 | hr = XmlGetAttributeEx(pixnNode, L"InstallCondition", &pPackage->sczInstallCondition); | 180 | hr = XmlGetAttributeEx(pixnNode, L"InstallCondition", &pPackage->sczInstallCondition); |
| 181 | if (E_NOTFOUND != hr) | 181 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @InstallCondition."); |
| 182 | { | ||
| 183 | ExitOnFailure(hr, "Failed to get @InstallCondition."); | ||
| 184 | } | ||
| 185 | 182 | ||
| 186 | // @RollbackBoundaryForward | 183 | // @RollbackBoundaryForward |
| 187 | hr = XmlGetAttributeEx(pixnNode, L"RollbackBoundaryForward", &scz); | 184 | hr = XmlGetAttributeEx(pixnNode, L"RollbackBoundaryForward", &scz); |
| 188 | if (E_NOTFOUND != hr) | 185 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @RollbackBoundaryForward."); |
| 189 | { | ||
| 190 | ExitOnFailure(hr, "Failed to get @RollbackBoundaryForward."); | ||
| 191 | 186 | ||
| 192 | hr = FindRollbackBoundaryById(pPackages, scz, &pPackage->pRollbackBoundaryForward); | 187 | if (fFoundXml) |
| 188 | { | ||
| 189 | hr = FindRollbackBoundaryById(pPackages, scz, &pPackage->pRollbackBoundaryForward); | ||
| 193 | ExitOnFailure(hr, "Failed to find forward transaction boundary: %ls", scz); | 190 | ExitOnFailure(hr, "Failed to find forward transaction boundary: %ls", scz); |
| 194 | } | 191 | } |
| 195 | 192 | ||
| 196 | // @RollbackBoundaryBackward | 193 | // @RollbackBoundaryBackward |
| 197 | hr = XmlGetAttributeEx(pixnNode, L"RollbackBoundaryBackward", &scz); | 194 | hr = XmlGetAttributeEx(pixnNode, L"RollbackBoundaryBackward", &scz); |
| 198 | if (E_NOTFOUND != hr) | 195 | ExitOnOptionalXmlQueryFailure(hr, fFoundXml, "Failed to get @RollbackBoundaryBackward."); |
| 199 | { | ||
| 200 | ExitOnFailure(hr, "Failed to get @RollbackBoundaryBackward."); | ||
| 201 | 196 | ||
| 202 | hr = FindRollbackBoundaryById(pPackages, scz, &pPackage->pRollbackBoundaryBackward); | 197 | if (fFoundXml) |
| 198 | { | ||
| 199 | hr = FindRollbackBoundaryById(pPackages, scz, &pPackage->pRollbackBoundaryBackward); | ||
| 203 | ExitOnFailure(hr, "Failed to find backward transaction boundary: %ls", scz); | 200 | ExitOnFailure(hr, "Failed to find backward transaction boundary: %ls", scz); |
| 204 | } | 201 | } |
| 205 | 202 | ||
| @@ -378,6 +375,7 @@ extern "C" void PackagesUninitialize( | |||
| 378 | { | 375 | { |
| 379 | ReleaseStr(pPackages->rgRollbackBoundaries[i].sczId); | 376 | ReleaseStr(pPackages->rgRollbackBoundaries[i].sczId); |
| 380 | ReleaseStr(pPackages->rgRollbackBoundaries[i].sczLogPath); | 377 | ReleaseStr(pPackages->rgRollbackBoundaries[i].sczLogPath); |
| 378 | ReleaseStr(pPackages->rgRollbackBoundaries[i].sczLogPathVariable); | ||
| 381 | } | 379 | } |
| 382 | MemFree(pPackages->rgRollbackBoundaries); | 380 | MemFree(pPackages->rgRollbackBoundaries); |
| 383 | } | 381 | } |
