Creazione di un'installazione con firma completa con Automazione
Nell'esempio seguente viene illustrato come popolare la tabella MsiDigitalCertificate e la tabella MsiDigitalSignature usando una sottoroutine Visual Basic, Applications Edition (VBA). Per altre informazioni sulla protezione dei pacchetti di Windows Installer, vedere Linee guida per la creazione di installazioni sicure.
Il metodo FileSignatureInfo restituisce un valore SAFEARRAY di byte. Per altre informazioni, vedere il tipo di dati SAFEARRAY. I dati di questa matrice devono essere convertiti in Unicode perché Visual Basic non dispone di un modo per scrivere byte direttamente in un file. Il metodo SetStream può quindi usare il file di dati convertiti per scrivere dati di flusso in un campo record specificato di un oggetto Record. Si noti che la conversione dei dati di byte in Unicode può potenzialmente modificare i dati e che i dati convertiti devono corrispondere ai dati originali per la verifica della firma corretta. L'autore del pacchetto deve assicurarsi che i dati originali e convertiti corrispondano.
Sub PopulateDigitalSignature()
Dim Installer As Object
Dim Database As Object
Dim x() As Byte
Const szSignedCabinet = "c:\test.cab"
Const szCertFile = "c:\temp\test.cer"
Const szDatabase = "c:\test.msi"
Set Installer = CreateObject("WindowsInstaller.Installer")
x = Installer.FileSignatureInfo(szSignedCabinet, 0, msiSignatureInfoCertificate)
Dim fs, ts
Dim s As String
Set fs = CreateObject("Scripting.FileSystemObject")
Set ts = fs.CreateTextFile(szCertFile, True) 'Create a file
s = StrConv(x, vbUnicode)
ts.Write s
ts.Close
Set Database = Installer.OpenDatabase(szDatabase, msiOpenDatabaseModeTransact)
Set ViewCert = Database.OpenView("SELECT * FROM `MsiDigitalCertificate`")
ViewCert.Execute 0
Set ViewSig = Database.OpenView("SELECT * FROM `MsiDigitalSignature`")
ViewSig.Execute 0
Set RecordCert = Installer.CreateRecord(2)
RecordCert.StringData(1) = "Test"
RecordCert.SetStream 2, szCertFile
ViewCert.Modify msiViewModifyInsert, RecordCert
Set RecordSig = Installer.CreateRecord(4)
RecordSig.StringData(1) = "Media"
RecordSig.StringData(2) = "1"
RecordSig.StringData(3) = "Test"
ViewSig.Modify msiViewModifyInsert, RecordSig
Database.Commit
fs.DeleteFile(szCertFile)
End Sub