2

有人可以帮我在 MSI 中构建一个自定义操作,它会在成功安装到某个 X 位置后自行复制。我已经看到它可以使用 .exe 来完成,但我只想使用 CA.DLL (C#) 来完成,因为这个 exe 将是一个开销。

4

1 回答 1

2

这是一个示例 VB 脚本,它将按名称查找已安装的产品并复制 MSI 的缓存副本。这将适用于 Windows 7 及更高版本,因为完整的 MSI 被缓存并且任何嵌入的 cab 文件都保留在 MSI 中。您只需在旧系统上获得没有有效负载的 MSI。

Dim installer, products, product, productCode
Set installer = Wscript.CreateObject("WindowsInstaller.Installer")

For Each productCode In installer.Products
  If InStr(1, LCase(installer.ProductInfo(productCode, "ProductName")), LCase("My Product Name")) Then Exit For
Next

If IsEmpty(productCode) Then Wscript.Quit 2

Set products = installer.ProductsEx(productCode, "", 7)
filesys.copyFile products(0).InstallProperty("LocalPackage"), "c:\path\to\newcopy.msi"
于 2012-07-13T21:19:03.560 回答