diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-22 23:25:40 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-22 23:25:40 +0300 |
| commit | d7ae163f8888cd9bf13e5a34e4d37f9518f76c01 (patch) | |
| tree | 9b69a93cd171ad3ead2906a0ff55f1d945a5a9ba | |
| parent | 705403fe31d8fd935bfebf92cdbdb511350ddbbf (diff) | |
fix: make windows installer checksum independent of get-filehash
refs #751
| -rw-r--r-- | src/update.rs | 6 | ||||
| -rw-r--r-- | website/install.ps1 | 8 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/update.rs b/src/update.rs index bedcc1b0..bceef7b0 100644 --- a/src/update.rs +++ b/src/update.rs @@ -638,6 +638,12 @@ fn install_windows_update_with_installer(channel: UpdateChannel) -> Result<(), S "irm https://herdr.dev/install.ps1 | iex", ]) .env("HERDR_CHANNEL", channel.as_str()) + // Drop any inherited PSModulePath. When herdr is launched from + // PowerShell 7, its Core module paths come first and Windows + // PowerShell 5.1 (this `powershell`) fails to autoload cmdlets like + // Get-FileHash. Removing it lets 5.1 compute its own default path. + // See PowerShell/PowerShell#8635. + .env_remove("PSModulePath") .status() .map_err(|err| format!("failed to run Windows installer: {err}"))?; diff --git a/website/install.ps1 b/website/install.ps1 index ccf08239..37ad8f78 100644 --- a/website/install.ps1 +++ b/website/install.ps1 @@ -147,7 +147,13 @@ function Test-FileDigest { return } - $actual = (Get-FileHash -LiteralPath $Path -Algorithm SHA256).Hash.ToLowerInvariant() + $sha256 = [System.Security.Cryptography.SHA256]::Create() + try { + $bytes = [System.IO.File]::ReadAllBytes($Path) + $actual = [System.BitConverter]::ToString($sha256.ComputeHash($bytes)).Replace("-", "").ToLowerInvariant() + } finally { + $sha256.Dispose() + } if ($actual -ne $ExpectedDigest.ToLowerInvariant()) { throw "Downloaded Herdr checksum did not match. Expected $ExpectedDigest but got $actual." } |
