需要一种方法将一个属性添加到VS2010中安装项目的msi属性表中

时间:2010-11-18 08:01:42

标签: visual-studio windows-installer

每次构建时,我都在使用Orca手动将属性“REINSTALLMODE”值“amus”添加到msi属性表中。

我厌倦了这一点。我调查了Wix,但到目前为止,我认为它不值得学习它的麻烦/切换到它,即使它将解决这个问题。有没有办法在构建完成后自动将这一个属性插入到msi中?优选地,它将仅使用vanilla visual studio 2010,而不依赖于第三方程序或系统环境变量。

有什么想法吗?

谢谢,

艾萨克

3 个答案:

答案 0 :(得分:5)

使用vbscript

更改现有属性

set o_installer = CreateObject("WindowsInstaller.Installer")
set o_database = o_Installer.OpenDatabase("path_to_your_msi", 1)
s_SQL = "SELECT Property, Value FROM Property Where Property = 'ReinstallMode'"
Set o_MSIView = o_DataBase.OpenView(s_SQL)
o_MSIView.Execute
Set o_MSIRecord = o_MSIView.Fetch
o_MSIRecord.StringData(2) = "amus"
o_MSIView.Modify 2, o_MSIRecord
o_DataBase.Commit

添加新属性

set o_installer = CreateObject("WindowsInstaller.Installer")
set o_database = o_Installer.OpenDatabase("path_to_your_msi", 1)
s_SQL = "INSERT INTO Property (Property, Value) Values( 'ReinstallMode', 'amus')"
Set o_MSIView = o_DataBase.OpenView( s_SQL)
o_MSIView.Execute
o_DataBase.Commit

答案 1 :(得分:4)

另一种选择是在应用程序的安装文件夹中包含版本号 将应用程序文件夹的默认位置设置为: [ProgramFilesFolder] \ [产品名称] \ [的ProductVersion]
同时将Setup项目的'RemovePreviousVersions'属性设置为true 这应删除旧版本的文件夹,并为新版本创建一个新文件夹 每次执行新版本时,请记住更改安装项目的版本属性。

答案 2 :(得分:1)

我诚实的想法?你开始沿着“VDPROJ很好,除了我还需要它做[x]。”你会找到一种方法来破解它,然后你会重复。在您了解它之前,您将拥有一个frankenstein解决方案,它正在为您的MSI做各种奇怪的事情,因为该工具不会暴露它,或者更糟糕的是它实现了错误。我真的建议去InstallShield 2010LE / Pro或WiX。

但是,如果您只想将REINSTALLMODE从omus更改为amus,我建议使用Orca创建一次转换,然后在post build步骤中将转换应用于构建的MSI。

cscript WiUseXfm.vbs [path to original database][path to transform file][options]

Apply a Transform