次の方法で共有


オートメーションを使用して完全に検証された署名済みインストールを作成する

次の例では、Visual Basic for Applications (VBA) サブルーチンを使用して MsiDigitalCertificate テーブルMsiDigitalSignature テーブルを設定する方法を示します。 Windows インストーラー パッケージのセキュリティ保護の詳細については、「セキュリティで保護されたインストールの作成に関するガイドライン」を参照してください。

FileSignatureInfo メソッドは、バイトの SAFEARRAY を返します。 詳細については、「SAFEARRAY データ型」を参照してください。 Visual Basic にはバイトを直接ファイルに書き込む方法がないため、この配列のデータを Unicode に変換する必要があります。 その後、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