find_vstool now verifies that the tool can be executed

This improvement is meant to discard tool binaries that cannot be run. This is useful when you have an old install of VS that is broken for whatever reason. Now, we will ensure the tool has a valid exit code
This commit is contained in:
David Sparer
2017-06-14 10:40:46 -05:00
parent 3d61d1bca0
commit 232de66683

View File

@@ -27,6 +27,16 @@ function EditBinCertificateIsValid() {
}
}
function ToolCanBeExecuted {
param (
[string]
$Path
)
$null = & $Path
Write-Output ($LASTEXITCODE -gt 0)
}
$rootSearchPaths = @(
[System.IO.Directory]::EnumerateFileSystemEntries("C:\Program Files", "*Visual Studio*", [System.IO.SearchOption]::TopDirectoryOnly),
[System.IO.Directory]::EnumerateFileSystemEntries("C:\Program Files (x86)", "*Visual Studio*", [System.IO.SearchOption]::TopDirectoryOnly)
@@ -37,7 +47,7 @@ foreach ($searchPath in $rootSearchPaths) {
foreach ($visualStudioFolder in $searchPath) {
$matchingExes = [System.IO.Directory]::EnumerateFileSystemEntries($visualStudioFolder, $FileName, [System.IO.SearchOption]::AllDirectories)
foreach ($matchingExe in $matchingExes) {
if (EditBinCertificateIsValid -Path $matchingExe) {
if ((EditBinCertificateIsValid -Path $matchingExe) -and (ToolCanBeExecuted -Path $matchingExe)) {
return $matchingExe
}
}