以编程方式更新 MSI 属性



我需要一种解决方案,希望应该相当简单 - 更新MSI属性。我们有许多 WiX 项目在 TFS 2012 中受到源代码控制,我们生成其相关的 MSI,以便通过 TeamCity 构建配置进行部署,这些配置通常构建所需的 *.wixproj 文件。

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

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

谢谢。

您可以使用

msiinfo.exe(这是Windows SDK的一部分)来读取/添加/更新msi属性。

C:Program Files (x86)Microsoft SDKsWindowsv7.0ABinMsiInfo.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 读取单个属性,因为它将尝试更新属性(有效地清除值)。

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

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

也许你可以尝试使用DTF(部署工具基础)。我已经在这个关于服务器错误的答案中写过它。请点击链接了解更多信息。

感谢您的所有出色反馈。

实际上,我找到了一个 VBScript 解决方案,它通过更新以前构建的 MSI 的必需属性出色地完成了这项工作。我已将其设置为构建步骤,该步骤在前面的团队城市构建步骤中创建 MSI 后运行。

不幸的是,我已将脚本保存在办公室PC上,因此此刻无法访问它进行共享。但是,我将在本周末之后在办公室时这样做。

最新更新