以编程方式更新MSI属性

时间:2015-01-16 10:27:37

标签: wix installer windows-installer

我需要一个可能非常简单的解决方案 - 更新MSI属性。我们有许多在TFS 2012中受源控制的WiX项目,我们通过TeamCity构建配置生成相关的MSI以进行部署,这些配置通常构建所需的* .wixproj文件。

在TFS / Visual Studio中更新MSI属性根本不是一个可供选择的选项,因为我们需要将我们的更改限制在TeamCity中,因为我们当前已经设置了整个持续集成和部署过程。

我希望实现的是一个解决方案,我可以运行脚本或命令来在创建后更新所需的MSI属性。我将欢迎使用Powershell,Perl,VBScript,Windows Batch脚本等任何脚本或命令的解决方案,因为这将被设置为最终的TeamCity构建步骤来修改创建的MSI。

谢谢。

4 个答案:

答案 0 :(得分:1)

您可以使用msiinfo.exe(Windows SDK的一部分)来读取/添加/更新msi属性。

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\MsiInfo.Exe>msiinfo.exe /?
MsiInfo V 5.0
Copyright (c) Microsoft Corporation. All Rights Reserved

++MsiInfo.exe Command Line Syntax++
MsiInfo.exe {database} --> To Display Summary Info Properties
MsiInfo.exe {database} Options.... --> To Set Summary Info Properties
++MsiInfo.exe Options++
PID_DICTIONARY   - /I {value}
PID_CODEPAGE     - /C {value}
PID_TITLE        - /T {value}
PID_SUBJECT      - /J {value}
PID_AUTHOR       - /A {value}
PID_KEYWORDS     - /K {value}
PID_COMMENTS     - /O {value}
PID_TEMPLATE     - /P {value}
PID_LASTAUTHOR   - /L {value}
PID_REVNUMBER    - /V {value}
PID_EDITTIME     - /E {value}
PID_LASTPRINTED  - /S {value}
PID_CREATE_DTM   - /R {value}
PID_LASTSAVE_DTM - /Q {value}
PID_PAGECOUNT    - /G {value}
PID_WORDCOUNT    - /W {value}
PID_CHARCOUNT    - /H {value}
PID_THUMBNAIL    - NOT SUPPORTED
PID_APPNAME      - /N {value}
PID_SECURITY     - /U {value}
Validate String Pool - [/B] /D  (use /B to display the string pool)
/?               - Displays this help message
/nologo          - Do not display the logo message

例如,您可以按如下方式设置“作者”和“主题”属性:

msiinfo.exe my.msi /A "Your name" /J "This is a demo"
  

请注意,您无法使用msiinfo.exe my.msi /I来读取单个属性,因为它会尝试更新属性(有效清除值)。

答案 1 :(得分:1)

假设您要在先前构建的MSI文件中修改MSI属性,则基本上在Windows Kit / SDK中找到WinRunSQL.vbs文件,然后学习SQL命令以更新Property表中的属性。这里有一些例子:http://msdn.microsoft.com/en-us/library/aa372021(v=vs.85).aspx

我假设你对MSI有足够的了解,知道你所引用的属性很可能是属性表中的属性。

答案 2 :(得分:0)

也许您可以尝试使用 DTF (部署工具基础)。我在this answer on serverfault写过这篇文章。请点击链接获取更多信息。

答案 3 :(得分:0)

感谢所有好的反馈。

我实际上找到了一个VBScript解决方案,通过更新我之前构建的MSI的必需属性来完成这项工作。我已将其设置为构建步骤,该步骤在我之前的Team City构建步骤中创建MSI后运行。

不幸的是,我将脚本保存在我的办公室电脑上,因此在此时无法访问它。但是,在本周末之后,我会在办公室时这样做。