Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O exemplo seguinte demonstra como preencher a tabela MsiDigitalCertificate e a tabela MsiDigitalSignature usando uma subrotina do Visual Basic for Applications (VBA). Para obter mais informações sobre como proteger pacotes do Windows Installer, consulte Diretrizes para criação de instalações seguras.
O método FileSignatureInfo retorna um SAFEARRAY de bytes. Para obter mais informações, consulte o Tipo de dados SAFEARRAY. Os dados dessa matriz devem ser convertidos em Unicode porque o Visual Basic não tem uma maneira de gravar bytes diretamente em um arquivo. O método SetStream pode usar o arquivo de dados convertidos para gravar dados de fluxo em um campo de registro especificado de um objeto Record. Observe que a conversão dos dados de byte para Unicode pode potencialmente alterar os dados e que os dados convertidos devem corresponder aos dados originais para a verificação correta da assinatura. O autor do pacote deve garantir que os dados originais e convertidos coincidam.
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