2012-01-30 12 views

Respuesta

6

Los 2 respuestas anteriores muestran una solución PowerShell. También puede lograr esto fácilmente desde un símbolo del sistema CMD.EXE.

for /r "yourRootFolder" %F in (*.msi) do signtool sign /a "%F" 

Obviamente necesita modificar sus opciones de signtool para satisfacer sus necesidades. El bit importante es% F retendrá iterativamente el nombre de cada archivo .MSI.

Si desea ejecutar el comando desde un archivo por lotes, entonces el% debe duplicarse, por lo que% F se convierte en %% F en ambos lugares.

2

asumiendo que conoce qué parámetros de línea de comandos que necesita para la herramienta MSI firma se puede obtener todos los MSI en una carpeta determinada de esta manera:

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

Aquí hay un ejemplo usando un certificado de firma de código (sólo tengo un certificado de $ cert):

$cert = Get-ChildItem -Path Cert: -CodeSigningCert -Recurse 
Get-ChildItem -Path C:\MsiFolder -Filter *.msi -Recurse | Set-AuthenticodeSignature -Certificate $cert 
0

¡Solo una solicitud de contraseña!

$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 
Cuestiones relacionadas