Tôi đang sử dụng signtool để ký msi của mình.Làm cách nào để ký tất cả các tệp msi nằm trong thư mục?
Cách đệ quy tìm kiếm tất cả các msi trong một thư mục và thư mục con rồi ký tất cả?
Tôi đang sử dụng signtool để ký msi của mình.Làm cách nào để ký tất cả các tệp msi nằm trong thư mục?
Cách đệ quy tìm kiếm tất cả các msi trong một thư mục và thư mục con rồi ký tất cả?
2 câu trả lời trước đây cho thấy giải pháp PowerShell. Bạn cũng có thể thực hiện việc này một cách dễ dàng từ CMD Command Prompt Command Prompt.
for /r "yourRootFolder" %F in (*.msi) do signtool sign /a "%F"
Rõ ràng bạn cần phải sửa đổi các tùy chọn signtool cho phù hợp với nhu cầu của mình. Bit quan trọng là% F sẽ lặp lại tên của mỗi tệp .MSI.
Nếu bạn muốn chạy lệnh từ bên trong tệp lô, thì% phải được tăng gấp đôi, vì vậy% F trở thành %% F ở cả hai vị trí.
Giả sử bạn biết những gì tham số dòng lệnh bạn cần cho công cụ ký MSI là bạn có thể nhận được tất cả MSIs dưới một thư mục được như thế này:
Get-ChildItem -recurse -path C:\MsiFolder -Include *.msi | ForEach-Object {
$msiPath = $_.FullName
$output = & the_msi_sign_tool.exe -msifile $msiPath -parameterB -parameterC 2>&1
if ($LASTEXITCODE -ne 0) {
Write-Error $output
}
}
Dưới đây là một ví dụ sử dụng một giấy chứng nhận ký mã (tôi chỉ có một chứng chỉ bằng $ cert):
$cert = Get-ChildItem -Path Cert: -CodeSigningCert -Recurse
Get-ChildItem -Path C:\MsiFolder -Filter *.msi -Recurse | Set-AuthenticodeSignature -Certificate $cert
Chỉ một lời nhắc mật khẩu!
$signExe = 'C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe'
$files = gci 'C:\Temp\*' -Include *.msi | %{('"{0}"' -f $_.FullName)}
$fingerprint = '00000000000000000000000000000000000000000'
$timestampUrl = 'http://rfc3161timestamp.globalsign.com/advanced'
$filesInputArg = $files -join " "
.$signExe sign /tr $timestampUrl /td SHA256 /sha1 $fingerprint $filesInputArg
Điều gì signtool? Có dòng lệnh có khả năng không? –
Có. Nó là một exe có thể được thực hiện từ dòng lệnh – Samselvaprabu