summaryrefslogtreecommitdiff
path: root/src/burn/engine/core.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-08-03 15:38:46 -0500
committerSean Hall <r.sean.hall@gmail.com>2021-08-04 10:03:57 -0500
commit5815688519a60e63e18c13dfe0908d76757cbc53 (patch)
treef2c6b78263ed996f0b36915f7bb5984e87c2e3e2 /src/burn/engine/core.cpp
parentab47449ca6ccd2ae2b6f0bf477bcea7e49aa8f6b (diff)
downloadwix-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.cpp27
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))