diff --git a/Tools/find_vstool.ps1 b/Tools/find_vstool.ps1 new file mode 100644 index 000000000..3e85f0601 --- /dev/null +++ b/Tools/find_vstool.ps1 @@ -0,0 +1,41 @@ +param ( + [string] + # Name of the file to find + $FileName +) + +# Returns the first full path to the $FileName that our search can find + +$rootSearchPaths = @( + [System.IO.Directory]::EnumerateFileSystemEntries("C:\Program Files", $FileName, [System.IO.SearchOption]::AllDirectories), + [System.IO.Directory]::EnumerateFileSystemEntries("C:\Program Files (x86)", $FileName, [System.IO.SearchOption]::AllDirectories) +) + + +function EditBinCertificateIsValid() { + param ( + [string] + $Path + ) + + # Verify file certificate + $microsoft_cert_thumbprint = "3BDA323E552DB1FDE5F4FBEE75D6D5B2B187EEDC" + $file_signature = Get-AuthenticodeSignature -FilePath $Path + if (($file_signature.Status -ne "Valid") -or ($file_signature.SignerCertificate.Thumbprint -ne $microsoft_cert_thumbprint)) { + Write-Warning "Could not validate the signature of $Path" + return $false + } else { + return $true + } +} + + +foreach ($searchPath in $rootSearchPaths) { + foreach ($entry in $searchPath) { + if (EditBinCertificateIsValid -Path $entry) { + return $entry + } + } +} + +Write-Error "Could not find any valid file by the name $FileName." -ErrorAction Stop \ No newline at end of file diff --git a/Tools/set_LargeAddressAware.ps1 b/Tools/set_LargeAddressAware.ps1 index ba785aea5..2f68f2d19 100644 --- a/Tools/set_LargeAddressAware.ps1 +++ b/Tools/set_LargeAddressAware.ps1 @@ -11,15 +11,7 @@ param ( Write-Output "===== Beginning $($PSCmdlet.MyInvocation.MyCommand) =====" # Find editbin.exe -$path_editBin = @((Resolve-Path -Path "C:\Program Files*\Microsoft Visual Studio*\VC\bin\editbin.exe").Path)[0] - -# Verify editbin certificate -$microsoft_cert_thumbprint = "3BDA323E552DB1FDE5F4FBEE75D6D5B2B187EEDC" -$editbin_signature = Get-AuthenticodeSignature -FilePath $path_editBin -if (($editbin_signature.Status -ne "Valid") -or ($editbin_signature.SignerCertificate.Thumbprint -ne $microsoft_cert_thumbprint)) { - Write-Error "Could not validate the signature of editbin.exe - we can not set LargeAddressAware" -ErrorAction Stop -} - +$path_editBin = & "$PSScriptRoot\find_vstool.ps1" -FileName "editbin.exe" $path_outputExe = Join-Path -Path $TargetDir -ChildPath $TargetFileName