- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 PowerShell 获取 MSI 摘要信息,我发现了几个用于打开 MSI 的“正常”表的脚本和代码片段。
所以这是我的问题,如何使用 PowerShell 打开摘要信息?
我附上了一些你可能会觉得有用的代码片段。
我用于获取摘要信息的代码不起作用!
function Get-SummaryInformation ( [IO.FileInfo] $FilePath ){
try {
$windowsInstaller = New-Object -com WindowsInstaller.Installer
$database = $windowsInstaller.GetType().InvokeMember(“OpenDatabase”, “InvokeMethod”, $Null,
$windowsInstaller, @($FilePath.FullName, 0))
$summary = $database.GetType().InvokeMember(“SummaryInformation”, “Invoke-Method”, $Null, $database, ([2]))
$MSI_Summary[1]=$summary.text
}
catch {
throw "ERROR - " + $_
}
}
function Get-MsiProductCode ( [IO.FileInfo] $FilePath ) {
try {
$windowsInstaller = New-Object -com WindowsInstaller.Installer
$database = $windowsInstaller.GetType().InvokeMember(“OpenDatabase”, “InvokeMethod”, $Null, $windowsInstaller, @($FilePath.FullName, 0))
$q = "SELECT `Value` FROM `Property` WHERE `Property` = 'ProductCode'"
$View = $database.GetType().InvokeMember(“OpenView”, “InvokeMethod”, $Null, $database, ($q))
$View.GetType().InvokeMember(“Execute”, “InvokeMethod”, $Null, $View, $Null)
$record = $View.GetType().InvokeMember(“Fetch”, “InvokeMethod”, $Null, $View, $Null)
$global:ProductCode = $record.GetType().InvokeMember(“StringData”, “GetProperty”, $Null, $record, 1)
} catch {
throw "Failed to get MSI file version the error was: {0}." -f $_
}
}
最佳答案
去取一份 WiX .它带有 MSI 的 .NET 包装器,使这更容易,例如:
PS> Add-Type -Path 'C:\Program Files (x86)\WiX Toolset v3.6\bin\Microsoft.Deployment.WindowsInstaller.dll'
PS> $db = new-object Microsoft.Deployment.WindowsInstaller.Database "$pwd\TypeScriptSetup.0.8.1.msi"
PS> $db.SummaryInfo
Title : Installation Database
Subject : TypeScript for Microsoft® Visual Studio® 2012
Author : Microsoft Corporation
Keywords : Installer
Comments : This installer database contains the logic and data required to install TypeScript for Microsoft®
Visual Studio® 2012.
Template : Intel;1033
LastSavedBy :
RevisionNumber : {B41DBDE5-CF50-42FB-AF8A-13EA3003BCA1}
CreatingApp : Windows Installer XML (3.6.3303.0)
LastPrintTime : 1/1/0001 12:00:00 AM
CreateTime : 11/14/2012 3:38:30 PM
LastSaveTime : 11/14/2012 3:38:30 PM
CodePage : 1252
PageCount : 500
WordCount : 2
CharacterCount : 0
Security : 2
Handle : 8
IsClosed : False
关于powershell - 获取 MSI 摘要信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20374421/
我的安装程序用 WiX 语言编码。它支持主要的升级机制。一个特殊的要求是 相同的 MSI 文件将无法安装两次。 现在是棘手的部分:如果用户安装然后再次尝试安装它(UI 模式),安装程序进入维护模式,一
我能否可靠地从 MySQL 等常规 MSI 包创建合并模块,以将其与我自己的安装合并?WiX 有相应的工具,但我应该从这种翻译中期待什么陷阱?从我自己的包安装其他 MSI 包的替代方法是什么? 最佳答
免责声明:我仍然没有超越最基本的WiX教程,因为每次我试图理解这些概念时,我的头开始旋转。 我一直在阅读Is it feasible/sensible to wrap an InnoSetup ins
是否有可能在不使用 PowerShell 安装的情况下从 MSI 文件中检索 MSI 产品代码?我想将 MSI 文件的产品代码与安装在机器上的 MSI 代码进行比较,以确定该文件是否曾经安装过。 最佳
我的 Wix 项目创建 install.msi 和 cab1.cab。我如何才能将所有内容捆绑到 msi 中?我可能会使用 7-zip SFX 来解决这个问题,但我见过其他应用程序只有一个 msi。
大多数人可能已经注意到,在卸载 MSI 软件包时,Windows 会要求提供原始的 .msi。文件。这是为什么? 我只能看到缺点: 对网络变化没有弹性。 对本地磁盘更改没有弹性。 用户的意料之外。 通
我正在寻找一个 C API,它可以获取 msi 路径并返回产品版本(主要版本和次要版本),而无需安装 API。 谢谢,埃坦 最佳答案 我不会使用开放包 - 这是一个静态数据库,因此 MsiOpenDa
我正在使用 VS 2008 为 c# windows 项目创建一个安装程序。我正在尝试编写一个自定义操作,从存储在文件服务器上的 MSI 文件的源目录(例如\server\fileshare\myap
我正在使用 WiX 编写 MSI 安装程序以启动依赖于 MSI 安装的 DLL 的服务。在 Vista 上,DLL 被添加到 MSI 的 InstallFinalize 中的全局程序集缓存中阶段,所以
我的 MSI 安装程序不会在 XP 上注册 DLL。在 Vista 上,除非我是管理员,否则它不会注册。在 Win7 上,它会随机注册 DLL 或不注册。 在 MSI 不会注册 DLL 后,用户被迫转
这是我第一次尝试使用 Windows Installer 来构建安装程序包(我们的客户不希望使用 Wix,我已经广泛使用它)。目前我有一个按预期构建和工作的 MSI。但是,我需要为我编写的程序所需的
我们已从 InstallShield LE 2010 转移到 WiX。 我们的新 WiX 安装程序能够卸载以前的 WiX msi 软件包,但它不会检测到从 IS msi 安装的以前版本的软件。 我们应
我正在使用 WiX制作 MSI安装程序调用另一个 MSI 安装程序。 我可以在 UILevel=5 (Full UI) 模式下解决这种情况。我的解决方案是将 CustomAction 添加到调用另一个
我在安装程序的 Windows 缓存方面遇到了问题。我正在尝试进行升级,每次 Windows 安装程序启动旧版本的安装程序时。当我进行升级时,它提示读取旧版本的 msi 文件时出现问题(因为它不再位于
MSI 的表 - “FeatureComponents”有两列:“Feature_”和“Component_”。我想要做的是一次更改“Feature_”列中的所有值。 IntPtr hDb = Int
作为持续集成测试的一部分,我们正在使用 msi 安装几个网站。 对于每个构建,我们要卸载旧的 msi 并安装一个新的。 问题是在构建服务器完成最新版本并重建系统后,我们没有旧的 msi。 有没有一种方
我有一个场景,要安装两个 MSI 包和一个 MSI 包。 例如,我们有两个产品要安装,即。 Sample1.MSI 和 Sample2.MSI。我们需要将 Sample2.MSI 包嵌入到 Sampl
我在 c# 中从 msi.dll 调用 get_PrimaryKeys() 函数时遇到问题。我想找出给定 MSI 表中的主键是什么。我使用以下代码: Type installerType = Type
更新:我更改了这个问题的标题以反射(reflect)下面一些答案真正需要的内容。 我希望能够在 Linux 中从 Visual Studio 2010 的 native 部署工具中生成的 MSI 获取
在 Windows 安装程序包 (.) 的 DefaultDir 列中,表示目录应位于其父目录中,没有子目录。 并且冒号 (:) 用于分隔目标和源目录名称。 DefaultDir 列中的单个值(不带冒
我是一名优秀的程序员,十分优秀!