It's not easy to answer because it depends of the complexity of the queries (as said JCHD).
The following expression returns True :
If (1=1 Or 2=3) And 4=4
Apparently you don't need to know that 2=3 is False because the whole condition returns True.
If you want to check each condition before execution, I would do that :
;~ Upgrade older versions are present
[Upgrade Software Name]
SWQuery = (%Qry01% Or %Qry02% Or %Qry03%) And %Qry04%
;~ New Install no other versions are present
[Install Software Name]
SWQuery = (%Qry01% Or %Qry02% Or %Qry03%) And %Qry04%
[Queries]
Qry01 = RegRead('HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\{Guid}.01', 'DisplayVersion') = ''
Qry02 = RegRead('HKLM64\Software\Microsoft\Windows\CurrentVersion\Uninstall\{Guid}.01', 'DisplayVersion') = ''
Qry03 = RegRead('HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\{Guid}.02', 'DisplayVersion') = ''
Qry04 = @OSArch = 'x64'
;~ #Include <Array.au3>
Local $sSWQueryUpdate = IniRead("test.ini", "Upgrade Software Name", "SWQuery", "error")
Local $sSWQueryInstall = IniRead("test.ini", "Install Software Name", "SWQuery", "error")
$aSWQueryUpdate = StringRegExp($sSWQueryUpdate, "%([^%]+)%", 3) ; extract the query's variables
Local $sSWQueryUpdateBoolean = $sSWQueryUpdate
;~ _ArrayDisplay($aSWQueryUpdate)
For $i = 0 To UBound($aSWQueryUpdate) - 1
$sCondition = IniRead("test.ini", "Queries", $aSWQueryUpdate[$i], "error") ; read the condition
$vRes = Execute($sCondition) ? True : False ; executes the condition
$sSWQueryUpdateBoolean = StringRegExpReplace($sSWQueryUpdateBoolean, "%" & $aSWQueryUpdate[$i] & "%", $vRes) ; replace each query by its result
ConsoleWrite("Condition " & $aSWQueryUpdate[$i] & " : " & ($vRes ? "SUCCESS" : "FAILURE") & @CRLF )
Next
ConsoleWrite($sSWQueryUpdateBoolean & @CRLF) ; Boolean condition
$iRes = Execute($sSWQueryUpdateBoolean)
ConsoleWrite("Result : " & $iRes)