2009-03-05 51 views
-1

我们开发的产品由客户分发给客户。我们需要允许客户公司的管理员在将其发送给最终用户之前对安装程序进行配置更改。这种情况下的配置更改意味着要在最终用户计算机上创建一对注册表项。我该怎么做呢?分销前配置安装程序

回答

2

这里是我们送出去给客户一个示例脚本。他们创建一个自定义配置文件,运行这个脚本,并最终得到一个MST和一个CAB,它将覆盖基本MSI中包含的默认值。

最初我们只是给了客户使用Orca的说明,但它确实只能让他们更新属性/值 - 如果您需要替换配置文件,那么对于大多数IT人员来说,结果有点复杂,除非他们有权访问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

您好sascha:您发布的脚本解决方案正是我一直在寻找的。我的脚本运行时没有任何错误,更新了msi上的修改日期。我试着修改两个不同的文件。 1)logo2.gif当我运行安装程序时出现错误:“安装程序在安装此程序包时遇到意外错误,这可能表示此程序包有问题,错误代码为2755。然后,“从服务器返回,返回值:110”。然后我试着和ascii配置文件。之后,我能够安装没有错误...但安装的文件不是更新的:( – blak3r 2009-05-23 07:03:36

相关问题