【问题标题】:How to change product code of msi using powershell?如何使用powershell更改msi的产品代码?
【发布时间】:2016-12-13 23:33:53
【问题描述】:

我们有基于 Wix 的 msi 和基于 Install shield 的 Msi。对于基于 wix 的 msi,我已经更改了 Wxs 文件中的产品代码,因此产品代码根据我的需要进行了更改。

但是对于 installshield msi ,我不能那样做。我探索了 Iscmdbld.exe 以获得更改产品代码的选项,但没有帮助。

一些博客提到使用 Wix 4.0 'WixToolset.Dtf.WindowsInstaller.dll'。但我没有用 Wix 3.10.3 找到这个程序集。

还有其他方法可以使用 powershell 更新产品代码吗?

【问题讨论】:

  • 这听起来像是你可以使用 Orca 的东西。
  • 您想通过更改产品代码获得什么?

标签: powershell wix windows-installer


【解决方案1】:

因为在 WiX 3.10.3 中,此库调用 Microsoft.Deployment.WindowsInstaller.dll。
您很可能已经看到此 article,它展示了如何借助 PowerShell 和 WiX 库编辑 MSI,只需使用 Microsoft。 Deployment.WindowsInstaller 来自 3.10.3,而不是 WixToolset.Dtf.WindowsInstaller。

这是一个更改 MSI ProductCode 的脚本:

#Copy dll from WiX binary files (version 3.10.3) 

# Add Required Type Libraries
Add-Type -Path "C:\Temp\Microsoft.Deployment.WindowsInstaller.dll"

# Open an MSI Database
$oDatabase = New-Object Microsoft.Deployment.WindowsInstaller.Database("C:\Temp\Bliss_LP_net.msi", [Microsoft.Deployment.WindowsInstaller.DatabaseOpenMode]::Direct);

#Create a Select Query against an individual property
$sSQLQuery = "SELECT * FROM Property WHERE Property= 'ProductCode'"

#Create and Execute a View object
[Microsoft.Deployment.WindowsInstaller.View]$oView = $oDatabase.OpenView($sSQLQuery)
$oView.Execute()

#Fetch the Result
$oRecord = $oView.Fetch()
$sProductCode = $oRecord.GetString(2)

#Display Retrieved Field
"ProductCode = $($sProductCode)"

#Generate new random guid 
$newProductCode = "{$((New-Guid).guid)}"
"newProductCode = $($newProductCode)"  

$oRecord.SetString("Value",$newProductCode)
$oView.Modify([Microsoft.Deployment.WindowsInstaller.ViewModifyMode]::Update,$oRecord)

#Close the Database
$oView.Close();
$oDatabase.Dispose();

【讨论】:

  • 虽然这似乎可行,但在运行带有更新的 ProductCode 的 msi 包时我感到很失望,因为我认为它可以帮助我跳过更改/修复按钮并允许我再次运行完整的设置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多