2012-01-30 31 views

Trả lời

6

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í.

2

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 
    } 
} 
3

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 
0

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 
Các vấn đề liên quan