From b4dd8a4197460c017190974405f58af09b9c6a1f Mon Sep 17 00:00:00 2001 From: cproudlock Date: Thu, 9 Apr 2026 10:10:11 -0400 Subject: [PATCH] VC++ extracted MSIs: bypass LaunchCondition CA via NOVSUI=1 The extracted VC++ 2008/2010/2012/2013/2022 MSIs have a hardcoded CustomAction CA_LaunchCondition (type 19 = msidbCustomActionTypeError) whose Target is "To install this product, please run Setup.exe. For other installation options, see the Installation section of ReadMe.htm." The CA's Condition row in InstallExecuteSequence is: NOT( (ADDEPLOY = 1 OR NOVSUI = 1 OR VSEXTUI = 1 OR ADVERTISED = 1 OR ProductState >= 1) ) So it fires (= aborts the install with that error) unless one of those sentinel properties is set on the command line. The 2008 MSI uses a slightly different name (CA_LaunchCondition_5122) and a different set: NOT( (USING_EXUIH = 1 OR USING_EXUIH_SILENT = 1 OR ProductState >= 1) ) The bootstrappers normally set NOVSUI=1 / USING_EXUIH_SILENT=1 to identify themselves as non-interactive installers. When we run the extracted MSI directly via msiexec, the property isn't set, the CA fires, msiexec returns 1603 with MSI Note 1: 1708, and the install rolls back. Fix: pass both properties unconditionally on every VC++ install. MSIs ignore unknown properties, so one args string works for all of them. Co-Authored-By: Claude Opus 4.6 (1M context) --- playbook/preinstall/preinstall.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/playbook/preinstall/preinstall.json b/playbook/preinstall/preinstall.json index 46d1e2d..efbe406 100644 --- a/playbook/preinstall/preinstall.json +++ b/playbook/preinstall/preinstall.json @@ -18,7 +18,7 @@ "Name": "VC++ Redistributable 2008 x86", "Installer": "vcredist/2008/installer.msi", "Type": "MSI", - "InstallArgs": "/qn /norestart REBOOT=ReallySuppress", + "InstallArgs": "/qn /norestart REBOOT=ReallySuppress NOVSUI=1 USING_EXUIH_SILENT=1", "DetectionMethod": "Registry", "DetectionPath": "HKLM:\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{9BE518E6-ECC6-35A9-88E4-87755C07200F}", "PCTypes": ["*"] @@ -28,7 +28,7 @@ "Name": "VC++ Redistributable 2010 x86", "Installer": "vcredist/2010/installer.msi", "Type": "MSI", - "InstallArgs": "/qn /norestart REBOOT=ReallySuppress", + "InstallArgs": "/qn /norestart REBOOT=ReallySuppress NOVSUI=1 USING_EXUIH_SILENT=1", "DetectionMethod": "Registry", "DetectionPath": "HKLM:\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{F0C3E5D1-1ADE-321E-8167-68EF0DE699A5}", "PCTypes": ["*"] @@ -38,7 +38,7 @@ "Name": "VC++ Redistributable 2012 x86 (Minimum)", "Installer": "vcredist/2012-min/installer.msi", "Type": "MSI", - "InstallArgs": "/qn /norestart REBOOT=ReallySuppress", + "InstallArgs": "/qn /norestart REBOOT=ReallySuppress NOVSUI=1 USING_EXUIH_SILENT=1", "DetectionMethod": "Registry", "DetectionPath": "HKLM:\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{BD95A8CD-1D9F-35AD-981A-3E7925026EBB}", "PCTypes": ["*"] @@ -47,7 +47,7 @@ "Name": "VC++ Redistributable 2012 x86 (Additional)", "Installer": "vcredist/2012-add/installer.msi", "Type": "MSI", - "InstallArgs": "/qn /norestart REBOOT=ReallySuppress", + "InstallArgs": "/qn /norestart REBOOT=ReallySuppress NOVSUI=1 USING_EXUIH_SILENT=1", "DetectionMethod": "Registry", "DetectionPath": "HKLM:\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{B175520C-86A2-35A7-8619-86DC379688B9}", "PCTypes": ["*"] @@ -57,7 +57,7 @@ "Name": "VC++ Redistributable 2013 x86 (Minimum)", "Installer": "vcredist/2013-min/installer.msi", "Type": "MSI", - "InstallArgs": "/qn /norestart REBOOT=ReallySuppress", + "InstallArgs": "/qn /norestart REBOOT=ReallySuppress NOVSUI=1 USING_EXUIH_SILENT=1", "DetectionMethod": "Registry", "DetectionPath": "HKLM:\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{13A4EE12-23EA-3371-91EE-EFB36DDFFF3E}", "PCTypes": ["*"] @@ -66,7 +66,7 @@ "Name": "VC++ Redistributable 2013 x86 (Additional)", "Installer": "vcredist/2013-add/installer.msi", "Type": "MSI", - "InstallArgs": "/qn /norestart REBOOT=ReallySuppress", + "InstallArgs": "/qn /norestart REBOOT=ReallySuppress NOVSUI=1 USING_EXUIH_SILENT=1", "DetectionMethod": "Registry", "DetectionPath": "HKLM:\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{F8CFEB22-A2E7-3971-9EDA-4B11EDEFC185}", "PCTypes": ["*"] @@ -76,7 +76,7 @@ "Name": "VC++ Redistributable 2022 x86 (Minimum)", "Installer": "vcredist/2022-min/installer.msi", "Type": "MSI", - "InstallArgs": "/qn /norestart REBOOT=ReallySuppress", + "InstallArgs": "/qn /norestart REBOOT=ReallySuppress NOVSUI=1 USING_EXUIH_SILENT=1", "DetectionMethod": "Registry", "DetectionPath": "HKLM:\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{922480B5-CAEB-4B1B-AAA4-9716EFDCE26B}", "PCTypes": ["*"] @@ -85,7 +85,7 @@ "Name": "VC++ Redistributable 2022 x86 (Additional)", "Installer": "vcredist/2022-add/installer.msi", "Type": "MSI", - "InstallArgs": "/qn /norestart REBOOT=ReallySuppress", + "InstallArgs": "/qn /norestart REBOOT=ReallySuppress NOVSUI=1 USING_EXUIH_SILENT=1", "DetectionMethod": "Registry", "DetectionPath": "HKLM:\\SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\{C18FB403-1E88-43C8-AD8A-CED50F23DE8B}", "PCTypes": ["*"]