2010-11-18 77 views
2

我一直在使用Orca手动将属性“REINSTALLMODE”值“amus”添加到msi属性表中,每次构建它时都会如此。需要添加一个属性到VS2010安装项目中的msi属性表

我厌倦了这一点。我看着维克斯,但到目前为止,我认为它不值得花时间学习它/切换到它,尽管它可以解决这个问题。有没有一种方法可以在构建完成后自动将这一个属性插入到msi中?优选地,它将仅使用vanilla visual studio 2010而不依赖于第三方程序或系统环境变量。

有什么想法?

感谢,

艾萨克

+1

请注意,如果您在安装程序中包含任何共享文件,REINSTALLMODE = amus可以做很糟糕的事情。通过替换**所有**版本,它会降级任何东西。如果REINSTALLMODE = emus适合你,我会强烈建议。 – 2010-11-20 16:23:36

回答

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 
+0

该属性称为REINSTALLMODE而不是ReinstallMode。你也可能需要做一个不是INSERT的UPDATE。 – 2010-11-18 14:08:48

+0

这个快速入侵很有效。我会弄清楚如何让它以某种方式发布。 – 2010-11-18 22:51:55

1

我的真实想法?你开始走下坡路“VDPROJ很好,除了我也需要它做[x]”。你会找到一种方法来破解它,然后你会重复。在你知道它之前,你将拥有一个frankenstein解决方案,它可以为你的MSI做各种奇怪的事情,因为这个工具没有公开它,或者更糟的是它实现了错误。我真的建议去InstallShield 2010LE/Pro或者WiX。但是,如果您只想将REINSTALLMODE从omus更改为amus,那么我建议您使用Orca创建一次转换,然后在后期构建步骤中将转换应用于构建的MSI。

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

Apply a Transform

+0

是的,当看着威克斯时,我认为我们不得不采取行动......有一天......当我想要学习新东西的时候。 – 2010-11-18 22:00:10

+0

虽然这个程序将被安装在<20台计算机上,但实际上拥有一个msi文件已经是我们正在取代(foxpro)的一大步。 – 2010-11-18 22:02:31

+0

感谢您的帮助,我与其他人一起去,因为我无法在任何地方找到wiusexfm文件。它应该在这个sdk中,但是sdk是2.5演出,我等不及了。如果我们需要比这更复杂的脚本,我将使用转换。如果他们变得更糟,我会去wix。感谢您今天的想法! -Isaac – 2010-11-18 22:51:21

3

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

+0

+1 - 这对我来说非常合适。 – 2013-05-14 20:50:26

+0

这工作完美;它删除了错误版本的旧DLL,并且它也安装了正确的版本!冰雹古斯塔夫! – 2016-09-23 23:33:57

+0

你是我的英雄! – Jeremi 2017-04-11 13:05:52