Windows安装程序 – 最简单的解决方案来替代MSI中的一个小文件?

前端之家收集整理的这篇文章主要介绍了Windows安装程序 – 最简单的解决方案来替代MSI中的一个小文件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我们的许多客户都可以访问InstallShield,WISE或AdminStudio.这些都不是问题.我希望有一些方法可以为我们的小客户提供商业重新打包工具,这是一个免费提供的一套工具和步骤来进行文件替换.

只需要更换压缩MSI中的单个配置文件,就可以假设目标用户已经安装了Orca,知道如何使用它来自定义属性表(嵌入GPO部署的许可证详细信息),并生成了一个MST文件.

免责声明:这与another question非常相似,但是该线程中的问题和答案都不清楚.

好的,我用自己的回答来回答这个问题,提供了一些很好的小VB脚本,这些脚本都会很重.如原始问题所述,目的是为sysadmin用户提供一个简单的解决方案,以便进行更新/更改.

以下是我目前为客户提供的代码的简化版本

  1. Option Explicit
  2.  
  3. Const MY_CONFIG = "MyConfigApp.xml"
  4. Const CAB_FILE = "config.cab"
  5. Const MSI = "MyApp.msi"
  6.  
  7. Dim filesys : Set filesys=CreateObject("Scripting.FileSystemObject")
  8.  
  9. If filesys.FileExists("temp.tmp") Then filesys.DeleteFile("temp.tmp")
  10. filesys.CopyFile MSI,"temp.tmp"
  11.  
  12. Dim installer,database,database2,view
  13. Set installer = CreateObject("WindowsInstaller.Installer")
  14. Set database = installer.OpenDatabase ("temp.tmp",1)
  15. Set database2 = installer.OpenDatabase (MSI,1)
  16.  
  17. If Not filesys.FileExists(MY_CONFIG) Then WScript.Quit 2 ' No config file,abort!
  18.  
  19. Dim objFile,size,result,seq,objCab
  20.  
  21. ' MakeCab object has been depreciated so we fallback to makecab.exe for with Windows 7
  22. On Error Resume Next ' Disable error handling,for a moment
  23. Set objCab = CreateObject("MakeCab.MakeCab.1")
  24. On Error Goto 0 ' Turn error handling back on
  25.  
  26. If IsObject(objCab) Then ' Object creation successful - use XP method
  27. objCab.CreateCab CAB_FILE,False,False
  28. objCab.AddFile MY_CONFIG,filesys.GetFileName(MY_CONFIG)
  29. objCab.CloseCab
  30. Set objCab = Nothing
  31. Else ' object creation Failed - try Windows 7 method
  32. Dim WshShell,oExec
  33. Set WshShell = CreateObject("WScript.Shell")
  34. Set oExec = WshShell.Exec("makecab " & filesys.GetFileName(MY_CONFIG) & " " & CAB_FILE)
  35. End If
  36.  
  37. Set objFile = filesys.GetFile(MY_CONFIG)
  38. size = objFile.Size
  39.  
  40. Set view = database.OpenView ("SELECT LastSequence FROM Media WHERE DiskId = 1")
  41. view.Execute
  42. Set result = view.Fetch
  43. seq = result.StringData(1) + 1 ' Sequence for new configuration file
  44.  
  45. Set view = database.OpenView ("INSERT INTO Media (DiskId,LastSequence,Cabinet) VALUES ('2','" & seq & "','" & CAB_FILE & "')")
  46. view.Execute
  47.  
  48. Set view = database.OpenView ("UPDATE File SET FileSize = " & size & ",Sequence = " & seq & ",FileName = 'MYC~2.CNF|MyConfigApp.xml' WHERE File = '" & MY_CONFIG & "'")
  49. view.Execute
  50.  
  51. database.GenerateTransform database2,"CustomConfig.mst"
  52. database.CreateTransformSummaryInfo database2,"CustomConfig.mst",0
  53. filesys.DeleteFile("temp.tmp")
  54.  
  55. Set view = nothing
  56. Set installer = nothing
  57. Set database = nothing
  58. Set database2 = nothing
  59. Set filesys = Nothing
  60. WScript.Quit 0

更新:MakeCab.MakeCab.1对象已折旧,代码已更新,现在可以使用Windows 7.

猜你在找的Windows相关文章