mirror of
https://github.com/modernw/App-Installer-For-Windows-8.x-Reset.git
synced 2026-04-13 20:28:33 +10:00
98 lines
3.2 KiB
PowerShell
98 lines
3.2 KiB
PowerShell
# ArmBuild.ps1
|
||
$ErrorActionPreference = "Stop"
|
||
|
||
$root = Split-Path -Parent $MyInvocation.MyCommand.Path
|
||
$staging = Join-Path $root "_staging"
|
||
$outZip = Join-Path $root "ArmPackage.zip"
|
||
$packageFolderName = "Desktop App Installer"
|
||
$destRoot = Join-Path $staging $packageFolderName
|
||
|
||
function Copy-Binaries-ToDest($src, $dest)
|
||
{
|
||
if (!(Test-Path $src)) { return }
|
||
|
||
Get-ChildItem $src -File | Where-Object {
|
||
$_.Extension -in ".exe", ".dll"
|
||
} | ForEach-Object {
|
||
Copy-Item -Path $_.FullName -Destination $dest -Force
|
||
}
|
||
}
|
||
|
||
function Sign-Files($directory)
|
||
{
|
||
$signtool = "C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe"
|
||
$pfx = Join-Path $root "Arm_PIE.pfx"
|
||
$pfxPassword = "" # 如果有密码请填写,例如 "123456"
|
||
$timestampUrl = "http://timestamp.digicert.com"
|
||
|
||
if (-not (Test-Path $signtool)) {
|
||
Write-Warning "signtool not found at $signtool, skipping signing"
|
||
return
|
||
}
|
||
if (-not (Test-Path $pfx)) {
|
||
Write-Warning "PFX file not found at $pfx, skipping signing"
|
||
return
|
||
}
|
||
|
||
$files = Get-ChildItem -Path $directory -Recurse -Include *.exe, *.dll
|
||
foreach ($file in $files) {
|
||
Write-Host "Signing $($file.FullName)..."
|
||
$filePath = $file.FullName
|
||
if ($pfxPassword) {
|
||
& $signtool sign /f $pfx /p $pfxPassword /fd SHA256 /tr $timestampUrl /td SHA256 /a "`"$filePath`""
|
||
} else {
|
||
& $signtool sign /f $pfx /fd SHA256 /tr $timestampUrl /td SHA256 /a "`"$filePath`""
|
||
}
|
||
if ($LASTEXITCODE -ne 0) {
|
||
Write-Error "Failed to sign $filePath (exit code: $LASTEXITCODE)"
|
||
# 如需停止脚本,取消下面一行的注释
|
||
# throw "Signing failed"
|
||
}
|
||
}
|
||
}
|
||
|
||
Write-Host "Preparing staging..."
|
||
# 清理旧的 staging
|
||
if (Test-Path $staging) { Remove-Item $staging -Recurse -Force }
|
||
New-Item $destRoot -ItemType Directory | Out-Null
|
||
|
||
# ① 先放 Release
|
||
Copy-Binaries-ToDest (Join-Path $root "Release") $destRoot
|
||
|
||
# ② 再放 ARM\Release(覆盖同名)
|
||
Copy-Binaries-ToDest (Join-Path $root "ARM\Release") $destRoot
|
||
|
||
# ③ shared 全部铺到 Desktop App Installer 里
|
||
$shared = Join-Path $root "shared"
|
||
if (Test-Path $shared) {
|
||
Get-ChildItem $shared -Recurse | ForEach-Object {
|
||
$relativePath = $_.FullName.Substring($shared.Length).TrimStart('\')
|
||
$destinationPath = Join-Path $destRoot $relativePath
|
||
|
||
if ($_.PSIsContainer) {
|
||
if (!(Test-Path $destinationPath)) {
|
||
New-Item -Path $destinationPath -ItemType Directory | Out-Null
|
||
}
|
||
} else {
|
||
$parentDir = Split-Path $destinationPath -Parent
|
||
if (!(Test-Path $parentDir)) {
|
||
New-Item -Path $parentDir -ItemType Directory | Out-Null
|
||
}
|
||
Copy-Item -Path $_.FullName -Destination $destinationPath -Force
|
||
}
|
||
}
|
||
}
|
||
|
||
# 对最终目录中的所有 .exe 和 .dll 文件进行签名
|
||
Sign-Files $destRoot
|
||
|
||
Write-Host "Creating ZIP..."
|
||
if (Test-Path $outZip) { Remove-Item $outZip -Force }
|
||
|
||
# 压缩 _staging 下的 Desktop App Installer 文件夹
|
||
Compress-Archive -Path $destRoot -DestinationPath $outZip -CompressionLevel Optimal
|
||
|
||
# 清理 staging
|
||
Remove-Item $staging -Recurse -Force
|
||
|
||
Write-Host "Done: $outZip" |