首页 文章

如何使用PowerShell更改msi的产品代码?

提问于
浏览
0

我们正在使用基于Wix的msi并安装基于屏蔽的Msi . 对于基于wix的msi,我更改了Wxs文件中的产品代码,因此根据我的需要更改了产品代码 .

但对于installshield msi,我不能这样做 . 我探索了Iscmdbld.exe选项来更改产品代码但没有帮助 .

一些博客说关于使用Wix 4.0'WixToolset.Dtf.WindowsInstaller.dll' . 但是我没有在Wix 3.10.3中找到这个程序集 .

有没有其他方法可以使用PowerShell更新产品代码?

1 回答

  • 2

    因为在WiX 3.10.3中,此库调用Microsoft.Deployment.WindowsInstaller.dll .
    您很可能已经看到了这个显示如何在PowerShell和WiX库的帮助下编辑MSI的article,只需使用3.10.3中的Microsoft.Deployment.WindowsInstaller而不是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();
    

相关问题