共用方式為


使用自動化撰寫完全驗證的已簽署安裝

下列範例示範如何使用 Visual Basic for Applications (VBA) 副程式填入 MsiDigitalCertificate 資料表MsiDigitalSignature 資料表 。 如需保護 Windows Installer 套件的詳細資訊,請參閱 撰寫安全安裝的指導方針

FileSignatureInfo 方法會傳回 SAFEARRAY 位元組。 如需詳細資訊,請參閱 SAFEARRAY 資料類型。 此陣列中的資料必須轉換成 Unicode,因為 Visual Basic 沒有直接寫入檔案中的位元組的方法。 然後,SetStream 方法可以使用已轉換資料的檔案,將資料流程資料寫入Record 物件的指定記錄欄位。 請注意,將位元組資料轉換成 Unicode 可能會變更資料,而且轉換的資料必須符合原始資料,才能進行正確的簽章驗證。 套件作者必須確保原始和已轉換的資料相符。

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