From 1449bb059b6252b3d9f3dbf4387a59132c4133ce Mon Sep 17 00:00:00 2001 From: Alexander Loren Date: Mon, 24 Aug 2026 19:20:22 -0700 Subject: [PATCH] Locates the dumpbin.exe without adding to PATH --- collect.ps1 | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/collect.ps1 b/collect.ps1 index cfc8e6b..7bbbeb8 100644 --- a/collect.ps1 +++ b/collect.ps1 @@ -14,6 +14,42 @@ if (-not (Test-Path $Executable)) { New-Item -ItemType Directory -Force -Path $Output | Out-Null +$vswherePath = "${env:ProgramFiles(x86)}\Microsoft Visual Studio\Installer\vswhere.exe" + +if (-not (Test-Path $vswherePath)) { + throw "Could not locate vswhere.exe. Verify that Visual Studio or Visual Studio Build Tools is installed." +} + +$visualStudioPath = & $vswherePath ` + -latest ` + -products * ` + -requires Microsoft.VisualStudio.Component.VC.Tools.x86.x64 ` + -property installationPath + +if (-not $visualStudioPath) { + throw "Could not locate a Visual Studio installation with the MSVC C++ tools installed." +} + +$toolsetVersionPath = Join-Path ` + $visualStudioPath ` + "VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt" + +if (-not (Test-Path $toolsetVersionPath)) { + throw "Could not locate the MSVC toolset version file." +} + +$toolsetVersion = (Get-Content $toolsetVersionPath -Raw).Trim() + +$dumpbinPath = Join-Path ` + $visualStudioPath ` + "VC\Tools\MSVC\$toolsetVersion\bin\Hostx64\x64\dumpbin.exe" + +if (-not (Test-Path $dumpbinPath)) { + throw "Could not locate dumpbin.exe at: $dumpbinPath" +} + +Write-Host "Using dumpbin: $dumpbinPath" + $windowsDirectories = @( $env:WINDIR, (Join-Path $env:WINDIR "System32"), @@ -66,13 +102,12 @@ function Copy-Dependencies { $binaryDirectory = Split-Path -Parent $Binary - $dependencies = dumpbin /DEPENDENTS $Binary | + $dependencies = & $dumpbinPath /DEPENDENTS $Binary | Select-String '^\s+.*\.dll$' | ForEach-Object { $_.Line.Trim() } | Sort-Object -Unique foreach ($dll in $dependencies) { - $key = $dll.ToLowerInvariant() if ($processed.ContainsKey($key)) {