2009-03-05 5 views
-1

私たちは、クライアントから顧客に配布される製品を開発します。クライアント企業の管理者は、エンドユーザにインストーラを送信する前に、インストーラの設定を変更する必要があります。この場合の構成の変更は、エンドユーザーのコンピュータで行われる2つのレジストリエントリを意味します。これはどうすればいいですか?配布前にインストーラを設定する

答えて

2

ここで我々は顧客に送るサンプルスクリプトです。彼らはカスタム設定ファイルを作成し、このスクリプトを実行し、MSIとベースMSIに含まれているデフォルトを上書きするCABになります。

オリジナルではOrcaを使用するよう指示しましたが、実際にはプロパティ/値を更新することしかできませんでした。設定ファイルを置き換える必要がある場合、アクセスがない限り、 WISE、InstallShieldなどに

Option Explicit 

Const MSI_SRC = "myapp.msi" 
Const MSI_TEMP = "temp.msi" 
Const MST_FILE = "custom.mst" 
Const MY_CONFIG = "customsettings.reg" 
Const CAB_FILE = "config.cab" 

Dim filesys 
Set filesys=CreateObject("Scripting.FileSystemObject") 

If filesys.FileExists(MSI_SRC) Then 
    filesys.CopyFile MSI_SRC, MSI_TEMP 
Else 
    MsgBox "Unable to find " & MSI_SRC & "exiting", 48, "Fatal Error" 
    Set filesys = Nothing 
    WScript.Quit 
End If 

If filesys.FileExists(MST_FILE) Then 
    filesys.DeleteFile(MST_FILE) 
End If 


Dim installer, database, database2, view 

Set installer = CreateObject("WindowsInstaller.Installer") 
Set database = installer.OpenDatabase (MSI_TEMP, 1) 
Set database2 = installer.OpenDatabase (MSI_SRC, 1) 

If filesys.FileExists(MY_CONFIG) Then 
    Dim objFile, size, result, seq, objCab 
    Set objCab = CreateObject("MakeCab.MakeCab.1") 
    objCab.CreateCab CAB_FILE, False, False, False 
    objCab.AddFile MY_CONFIG, filesys.GetFileName(MY_CONFIG) 
    objCab.CloseCab 

    Set objFile = filesys.GetFile(MY_CONFIG) 
    size = objFile.Size 

    Set view = database.OpenView ("SELECT LastSequence FROM Media WHERE DiskId = 1") 
    view.Execute 
    Set result = view.Fetch 
    seq = result.StringData(1) + 1 ' Sequence for new configuration file 

    Set view = database.OpenView ("INSERT INTO Media (DiskId, LastSequence, Cabinet) VALUES ('2', '" & seq & "', '" & CAB_FILE & "')") 
    view.Execute 

    Set view = database.OpenView ("UPDATE File SET FileSize = " & size & ", Sequence = " & seq & ", FileName = 'CUSTOM~2.REG|customsettings.reg' WHERE File = '" & LCase(MY_CONFIG) & "'") 
    view.Execute 
End If 


database.GenerateTransform database2, MST_FILE 
database.CreateTransformSummaryInfo database2, MST_FILE, 0, 0 

' Cleanup 
Set database = Nothing 
Set database2 = Nothing 
Set installer = Nothing 
Set view = Nothing 

filesys.DeleteFile(MSI_TEMP) 
Set filesys = Nothing 
+0

ハイサスカ:あなたが投稿したスクリプトソリューションは、私が探していたものです。私はあなたのスクリプトをエラーなく実行し、msiの更新日を更新しました。私は2つの異なるファイルを修正しようとしました。 1)logo2.gifインストーラを実行したときにエラーが発生しました:「このパッケージをインストールする際に、インストーラで予期しないエラーが発生しました。次に、 "Back from server。戻り値:110"それから、私はascii設定ファイルを試しました。その後、私はエラーなしでインストールすることができました...しかし、インストールされたファイルは更新されたものではありませんでした:( – blak3r

関連する問題