我一直在使用Orca手动将属性“REINSTALLMODE”值“amus”添加到msi属性表中,每次构建它时都会如此。需要添加一个属性到VS2010安装项目中的msi属性表
我厌倦了这一点。我看着维克斯,但到目前为止,我认为它不值得花时间学习它/切换到它,尽管它可以解决这个问题。有没有一种方法可以在构建完成后自动将这一个属性插入到msi中?优选地,它将仅使用vanilla visual studio 2010而不依赖于第三方程序或系统环境变量。
有什么想法?
感谢,
艾萨克
我一直在使用Orca手动将属性“REINSTALLMODE”值“amus”添加到msi属性表中,每次构建它时都会如此。需要添加一个属性到VS2010安装项目中的msi属性表
我厌倦了这一点。我看着维克斯,但到目前为止,我认为它不值得花时间学习它/切换到它,尽管它可以解决这个问题。有没有一种方法可以在构建完成后自动将这一个属性插入到msi中?优选地,它将仅使用vanilla visual studio 2010而不依赖于第三方程序或系统环境变量。
有什么想法?
感谢,
艾萨克
使用一个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
该属性称为REINSTALLMODE而不是ReinstallMode。你也可能需要做一个不是INSERT的UPDATE。 – 2010-11-18 14:08:48
这个快速入侵很有效。我会弄清楚如何让它以某种方式发布。 – 2010-11-18 22:51:55
我的真实想法?你开始走下坡路“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]
是的,当看着威克斯时,我认为我们不得不采取行动......有一天......当我想要学习新东西的时候。 – 2010-11-18 22:00:10
虽然这个程序将被安装在<20台计算机上,但实际上拥有一个msi文件已经是我们正在取代(foxpro)的一大步。 – 2010-11-18 22:02:31
感谢您的帮助,我与其他人一起去,因为我无法在任何地方找到wiusexfm文件。它应该在这个sdk中,但是sdk是2.5演出,我等不及了。如果我们需要比这更复杂的脚本,我将使用转换。如果他们变得更糟,我会去wix。感谢您今天的想法! -Isaac – 2010-11-18 22:51:21
另一种选择是包括在应用程序的安装文件夹的版本号。
设置应用程序文件夹的默认位置是这样的:
[ProgramFilesFolder] \ [产品名称] \ [的ProductVersion]
安装项目的 'RemovePreviousVersions' 属性也设置为true。
这应删除旧版本的文件夹并为新版本创建一个新文件夹。
请记住在每次执行新版本时更改安装项目的版本属性。
+1 - 这对我来说非常合适。 – 2013-05-14 20:50:26
这工作完美;它删除了错误版本的旧DLL,并且它也安装了正确的版本!冰雹古斯塔夫! – 2016-09-23 23:33:57
你是我的英雄! – Jeremi 2017-04-11 13:05:52
请注意,如果您在安装程序中包含任何共享文件,REINSTALLMODE = amus可以做很糟糕的事情。通过替换**所有**版本,它会降级任何东西。如果REINSTALLMODE = emus适合你,我会强烈建议。 – 2010-11-20 16:23:36