diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2021-08-03 15:38:46 -0500 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2021-08-04 10:03:57 -0500 |
commit | 5815688519a60e63e18c13dfe0908d76757cbc53 (patch) | |
tree | f2c6b78263ed996f0b36915f7bb5984e87c2e3e2 /src/burn/engine/core.cpp | |
parent | ab47449ca6ccd2ae2b6f0bf477bcea7e49aa8f6b (diff) | |
download | wix-5815688519a60e63e18c13dfe0908d76757cbc53.tar.gz wix-5815688519a60e63e18c13dfe0908d76757cbc53.tar.bz2 wix-5815688519a60e63e18c13dfe0908d76757cbc53.zip |
Update Burn ARP command lines to skip clean room.
This also adds an escape hatch to Burn for antivirus interfering with clean room.
Diffstat (limited to 'src/burn/engine/core.cpp')
-rw-r--r-- | src/burn/engine/core.cpp | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/src/burn/engine/core.cpp b/src/burn/engine/core.cpp index f71103a8..0468d406 100644 --- a/src/burn/engine/core.cpp +++ b/src/burn/engine/core.cpp | |||
@@ -1375,7 +1375,11 @@ extern "C" HRESULT CoreParseCommandLine( | |||
1375 | } | 1375 | } |
1376 | else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &argv[i][1], lstrlenW(BURN_COMMANDLINE_SWITCH_CLEAN_ROOM), BURN_COMMANDLINE_SWITCH_CLEAN_ROOM, lstrlenW(BURN_COMMANDLINE_SWITCH_CLEAN_ROOM))) | 1376 | else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &argv[i][1], lstrlenW(BURN_COMMANDLINE_SWITCH_CLEAN_ROOM), BURN_COMMANDLINE_SWITCH_CLEAN_ROOM, lstrlenW(BURN_COMMANDLINE_SWITCH_CLEAN_ROOM))) |
1377 | { | 1377 | { |
1378 | if (BURN_MODE_UNTRUSTED != *pMode) | 1378 | if (BURN_MODE_UNTRUSTED == *pMode) |
1379 | { | ||
1380 | *pMode = BURN_MODE_NORMAL; | ||
1381 | } | ||
1382 | else | ||
1379 | { | 1383 | { |
1380 | fInvalidCommandLine = TRUE; | 1384 | fInvalidCommandLine = TRUE; |
1381 | TraceLog(E_INVALIDARG, "Multiple mode command-line switches were provided."); | 1385 | TraceLog(E_INVALIDARG, "Multiple mode command-line switches were provided."); |
@@ -1383,17 +1387,18 @@ extern "C" HRESULT CoreParseCommandLine( | |||
1383 | 1387 | ||
1384 | // Get a pointer to the next character after the switch. | 1388 | // Get a pointer to the next character after the switch. |
1385 | LPCWSTR wzParam = &argv[i][1 + lstrlenW(BURN_COMMANDLINE_SWITCH_CLEAN_ROOM)]; | 1389 | LPCWSTR wzParam = &argv[i][1 + lstrlenW(BURN_COMMANDLINE_SWITCH_CLEAN_ROOM)]; |
1386 | if (L'=' != wzParam[0] || L'\0' == wzParam[1]) | 1390 | if (L'\0' != wzParam[0]) |
1387 | { | ||
1388 | fInvalidCommandLine = TRUE; | ||
1389 | TraceLog(E_INVALIDARG, "Missing required parameter for switch: %ls", BURN_COMMANDLINE_SWITCH_CLEAN_ROOM); | ||
1390 | } | ||
1391 | else | ||
1392 | { | 1391 | { |
1393 | *pMode = BURN_MODE_NORMAL; | 1392 | if (L'=' != wzParam[0]) |
1394 | 1393 | { | |
1395 | hr = StrAllocString(psczSourceProcessPath, wzParam + 1, 0); | 1394 | fInvalidCommandLine = TRUE; |
1396 | ExitOnFailure(hr, "Failed to copy source process path."); | 1395 | TraceLog(E_INVALIDARG, "Invalid switch: %ls", argv[i]); |
1396 | } | ||
1397 | else if (L'\0' != wzParam[1]) | ||
1398 | { | ||
1399 | hr = StrAllocString(psczSourceProcessPath, wzParam + 1, 0); | ||
1400 | ExitOnFailure(hr, "Failed to copy source process path."); | ||
1401 | } | ||
1397 | } | 1402 | } |
1398 | } | 1403 | } |
1399 | else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &argv[i][1], -1, BURN_COMMANDLINE_SWITCH_EMBEDDED, -1)) | 1404 | else if (CSTR_EQUAL == ::CompareStringW(LOCALE_INVARIANT, NORM_IGNORECASE, &argv[i][1], -1, BURN_COMMANDLINE_SWITCH_EMBEDDED, -1)) |