安装前获取功能安装成本

2023-12-09

我们正在为您的安装制作自定义引导程序/外部 UI。

我们希望提供一个“自定义安装”对话框(就像在 MSI 中一样),以允许用户选择他们想要安装或删除的功能。

目前,我们能够从 MSI 数据库本身读取功能(以及其他功能详细信息,例如描述)(通过在 MSI 数据库上运行 SQL 查询)Feature table).

但是,我们还想显示安装功能的成本。 Windows Installer“自定义安装”对话框可以执行此操作。

我认为我们可以通过执行以下操作来模仿该行为:

  1. Pick a Feature你想要得到的成本
  2. 使用FeatureComponents表,得到Component与 1 中的特征相关联
  3. 使用File表,添加FileSize与 2 中标识的组件关联的文件的数量
  4. 3 的总和是功能安装的成本

问题:

  1. 是否有一个 API(来自 DTF 或 MSI.DLL)可供我们在安装之前获取功能的成本? (有一个FeatureInfo.GetCostDTF 中的方法,但不能直接使用它。必须先安装产品才能调用FeatureInfo.GetCost from ProductInstallation)
  2. 如果没有 API,上面给出的程序对于计算功能安装的成本是否合适或正确?

谢谢! :)

更新#1

我认为有一种方法可以在开始安装之前通过 API 获取功能安装的成本。我是这样做的:

Installer.SetInternalUI(InstallUIOptions.Silent);

Session s = Installer.OpenPackage(@"C:\a.msi", false);

foreach (FeatureInfo info in s.Features)
{
    MessageBox.Show(info.Name);
    MessageBox.Show(info.GetCost(false, false, InstallState.Unknown).ToString());
}
s.Close();

calling info.name成功返回功能名称。然而,调用info.GetCost将返回一个InvalidHandlerException并显示一条消息:“选择管理器未初始化”。

这就是我现在所在的地方。

更新#2:

我正在得到InvalidHandlerException因为我没有调用所需的文件成本核算例程在我打电话之前info.GetCost。这是我修改后的代码:

  Installer.SetInternalUI(InstallUIOptions.Silent);

  Session s = Installer.OpenPackage(@"C:\1.msi", false);
  s["ROOTDRIVE"] = @"C:\";
  s.DoAction("CostInitialize");
  s.DoAction("FileCost");
  s.DoAction("CostFinalize");

  foreach (FeatureInfo info in s.Features)
  {
       long cost = info.GetCost(false, false, InstallState.Local);
       MessageBox.Show(info.Title + " " + cost);
  }
  s.Close();

我不再收到无效处理程序异常,但返回的所有文件成本为 -1099511627776。


是的,有一个 API。您需要通过调用 OpenPackage 来获取 MSI 会话。通过这样做,您将可以访问功能列表,从而可以访问 GetCost 方法。

1 Gotcha:在计算成本之前,您需要执行 4 个标准操作:成本初始化, FileCost, 成本最终确定 and 安装验证.

    Installer.SetInternalUI(InstallUIOptions.Silent);

    Session s = Installer.OpenPackage(@"C:\1.msi", false);
    s.DoAction("CostInitialize");
    s.DoAction("FileCost");
    s.DoAction("CostFinalize");
    s.DoAction("InstallValidate");

    foreach (FeatureInfo info in s.Features)
    {
        long cost = info.GetCost(false, false, InstallState.Local);
        MessageBox.Show(info.Title + " " + cost);
    }
    s.Close();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

安装前获取功能安装成本 的相关文章

  • 如何引导 SQL Server 2008 Express SP1?

    我正在尝试将 SQL Server 2008 Express SP1 引导到我的应用程序中 之前我使用 Wise for Windows 来执行必备安装 但 Wise 尚不支持 Windows Installer 4 5 我现在尝试将 Vi
  • 安装 RVM 时出现问题

    我已按照 rvm 网站上的说明执行了命令 但似乎不起作用 从 git 存储库获取代码运行顺利 但是当我尝试使用时 rvm notes Error usr local bin rvm line 73 home cody rvm scripts
  • 如何打包java web应用程序

    我们公司开发了一个基于Struts2 Spring Hibernate的Web应用程序 老板要我制作一张包含JRE Tomcat MySQL以及我们的产品的安装光盘 这样客户只要点击installMe exe之类的 按照向导就可以完成安装
  • 手动创建 msix 包,无需 GUI 或 msi 安装程序

    谁能给我提示如何手动定义 msix 包 我的应用程序还没有 msi 包 所以我不能简单地转换它 有没有一种方法可以像配置文件一样创建 我可以手动定义哪些文件需要进入 msix 包 MSIX GUI Creator 也没有给我足够的控制权 非
  • 从 C# 调用 MsiEnumRelatedProducts 崩溃

    我在从 C 调用 MsiEnumRelatedProducts 时遇到了无穷无尽的麻烦 我尝试了 p invoke 定义的几种变体 但没有成功 out 和 ref 我认为问题在于最后一个参数 它是一个 LPTSTR 应该指向一个 39 个字
  • Google Cloud SDK 安装程序无法在 Windows 7 上完成组件安装

    在安装过程中我收到一条消息 不幸的是 组件安装没有成功完成 请检查详细日志以获取错误消息 我尝试安装到所有用户 单个用户 许多目的地和名称 Details 输出文件夹 C Program Files x86 Google Cloud SDK
  • Wix 安装结束后添加多个复选框

    我的 C 应用程序有一个设置 在设置结束时 我添加了一个建议启动应用程序的复选框 效果很好 但我无法添加第二个复选框来提议启动可选安装程序 有我的代码
  • Python Shapely 安装不起作用?

    有什么想法吗 我尝试卸载 Shapely 并使用 PIP 安装 我有 Anaconda 并安装了 Fiona 很好 Shapely 看起来也很好 简单代码 import fiona import shapely dirVar C Users
  • 如何说服 VS2005 msi 升级?

    我有一个使用 VS2005 用 C 编写的 Windows 服务 安装是通过一个向导调用 msiexec 来安装同样使用 VS2005 创建的 msi 文件 我在生成将从一个版本的服务升级到另一个版本的 msi 文件时遇到问题 向导程序负责
  • 使用 numpy.distutils.core.setup 之前安装 numpy

    我在用numpy distutils设置具有 fortran 模块的包 mypackage 问题是如果我这样做pip install mypackage在没有 numpy 的环境中 出现以下错误 ModuleNotFoundError 没有
  • 使用 Powershell 远程安装 .msi

    我已经让他使用这个论坛上存在的代码来跟踪代码 cls computername Get Content C Users C201578 db Documents server txt sourcefile iceopsnas LNT Sof
  • 安装引导程序如何检测是否安装了先决条件?

    试图解决这个问题 https stackoverflow com questions 2591384 bootstrapper setup exe says net 3 5 not found but launching msi direc
  • 由于符号链接错误,无法在 Mac OSX 10.8.1 中安装 ruby​​-1.9.2

    首先 我尝试了常见的rvm安装 rvm安装1 9 2 但是 显示了以下错误 The provided compiler usr bin gcc is LLVM based it is not yet fully supported by r
  • Windows7上python3.5无法安装BeautifulSoup4

    我已经从下载了 beautifulsoup4 4 5 3 tar gzhttps www crummy com software BeautifulSoup bs4 download 4 5 https www crummy com sof
  • VS 2015 SSDT 安装失败

    我的计算机上安装了 Microsoft Visual Studio Professional 2015 还安装了 SQL Server 2017 我正在尝试在我的计算机上安装用于 BI 项目的 SQL Server 开发工具 我尝试安装 S
  • PHP Solr PECL 扩展安装

    我已经使用命令安装了 pecl solr pecl install solr 和梨使用 wget http pear php net go pear phar php go pear phar 重启Apache后 我仍然收到错误 Fatal
  • 如何查明已安装哪些产品 - 已安装较新的产品 MSI windows

    我可以通过 WIX 创建 MSI gt 我们将其安装在 IIS 上 发生了什么 我们已经在 1 8 上安装了某个版本的应用程序 然后我们安装了 99 0 版本只是为了测试目的 然后我们卸载了这个 99 版本 然后我尝试安装其他版本并获得 已
  • Python 3.6.1 安装位置

    我在 Ubuntu 16 服务器上安装了 Python 3 6 1 但找不到安装位置 我查看了 usr bin 其中提到了除 3 6 1 之外的所有其他版本 在哪里可以找到该版本的可执行文件 使用命令 whereis python3 6 1
  • 为什么.NET Framework 4.0安装程序的大小小于3.0/3.5?

    我看到 Net Framework 4 0的beta2安装程序只有55MB 而 Net 3 5的安装程序有200 MB 这是怎么回事 NET 3 5 之所以这么大 是因为它在同一个包中包含 x64 版本的框架 2 0 3 0 软件包针对 x
  • 卸载以前的版本安装新版本的安装项目

    我创建了一个安装项目并安装在Windows系统中 在安装安装项目之前 我将其设置为 DetectNewInstallerVersion true and RemovePreviousVersion True 我也每次都换版本 但是 如果我重

随机推荐

  • Node.js Express 未收到请求

    我正在使用 Express Web 框架并尝试从 AngularJS 发出 http 请求 我正在将数据传递给客户端的请求 但服务器由于某些未知原因未收到请求 请帮忙 服务器 js var express require express v
  • 如何使用iPhone SDK创建PDF文档? [复制]

    这个问题在这里已经有答案了 如何使用iPhone SDK创建PDF文档 任何教程和示例都会有所帮助 Thanks Quartz 2D 苹果教程 http developer apple com library mac documentati
  • 使用 Newtonsoft 将 Json 值转换为 Integer

    我使用以下代码向 xml 添加属性 以指定该节点在使用 JsonConvert SerializeXmlNode 时应返回 Integer 值 我已将 Newtonsoft 的更新合并到我引用的 dll 中 我使用以下代码来添加属性 ele
  • 可以从设备内核调用 CULA 例程吗?

    因此 我试图看看使用 GPU 通过同时求解一组问题来求解小型超定方程组是否可以获得显着的加速 我当前的算法涉及使用 CULA Dense 库中的 LU 分解函数 该函数还必须在 GPU 和 CPU 之间来回切换以初始化和运行 CULA 函数
  • 通过 user32.dll 中的 SendInput 发送密钥

    我在用这个板作为演示目的的键盘 无论如何 长话短说 除了极少数情况外 一切正常 我发送击键发送输入函数位于 user32 dll 中 所以我的程序看起来像 static void Main string args Console Write
  • 确定 PHP 中的 Referer

    确定哪个页面发送或调用 通过 AJAX 当前页面的最可靠 最安全的方法是什么 我不想使用 SERVER HTTP REFERER 由于 缺乏 可靠性 我需要调用的页面仅来自我网站上的请求 编辑 我希望验证是否正在从我的网站上的页面调用执行一
  • ValueError:没有为任何变量提供渐变:['conv2d/kernel:0', 'conv2d/bias:0', 'conv2d_1/kernel:0', 'conv2d_1/bias:0',

    系统信息 Colab张量流2 2 0 描述当前行为 当我尝试解决自己的数据问题 即多标签语义分割 时 我遇到了这个错误 下面是代码 import tensorflow as tf import tensorflow keras backen
  • Springfox - 更改 swagger-ui 的路径

    现在大摇大摆的服务来自http localhost 8080 myContextRoot swagger ui html 我可以配置 swagger 及其要提供服务的资源吗http localhost 8080 myContextRoot
  • 从 Ansible 事实创建变量

    我有四个系统 在这些系统中我需要提取事实 然后将它们用作 jinja 2 模板上的变量 在 Ansible 中我有 vars office1 web01 myip 10 10 10 10 or fact peer 10 10 10 20 w
  • 无法使用 htmlunit 以编程方式登录 facebook

    我已经尝试过给出的代码HTMLunit Facebook 登录 and 使用 HTMLUnit 使用 Java 以编程方式登录 Facebook 不过我没有登录脸书 启用 JavaScript 后 webClient setJavaScri
  • GoogleTest CMake 无法识别 TEST_F:就像它无法识别 GTest 一样

    好吧 我承认 这是一个特殊的案例 当我们构建应用程序时 我们使用 make 因此我将测试包含在 src 下的测试文件夹中 然后 在与发布文件夹相同的级别 我们创建了一个单元测试文件夹 其中包含所有源文件和测试源文件 但我的IDE是CLion
  • 使用 ROCR 和 pROC (R) 计算平均 AUC 的差异

    我正在使用来自 SVM RFE 模型的交叉验证数据 10 倍重复 5 次 caret包裹 我知道caret包适用于pROC计算指标时包 但我需要使用ROCR包以获得平均 ROC 然而 我注意到使用每个包时的平均 AUC 值并不相同 所以我不
  • 使用 python 在 os.system 的参数中使用行“找不到命令”

    我是 python 新手 正在从事一些 xyz 项目 其中我正在获取第一天日期的报告 获取数据并将其重定向到 Linux 机器上的另一个文件中 这是我的代码 usr bin python import os cur date os pope
  • WCF Web 服务从 SoapUI 超时

    我在 WCF 项目 Net 4 0 中有以下内容 ServiceContract public interface EchoService OperationContract void Ping ServiceBehavior public
  • 使用 Spring Batch 的复杂 XML; StaxEventItemWriter ; Jaxb2Marshaller

    我需要使用 Spring Batch 编写稍微复杂的 XML 谁能帮我进行适当的 Spring 配置吗 以下是该过程所需的输出
  • 在 R 中查找排序向量中的值索引

    我在 R 中有一个由唯一整数组成的有序向量 我想找到最接近但小于或等于某个值的元素的索引 例如 对于向量4 8 15 16 23 42和搜索值17 我希望函数返回4 指数16 在Python中 我会使用bisect模块 R中有类似的东西吗
  • 即使使用 strip_cdata=False 之后,CDATA 也会在 lxml 中被剥离

    我有一个要求 我需要读取 XML 文件并用特定值替换字符串 XML 包含 CDATA 元素 我需要保留它 我尝试使用解析器并将 strip data 设置为 false 这是行不通的 需要帮助找出实现它的方法 import lxml etr
  • PostgreSQL 连接问题

    我的应用程序有一个非常奇怪的问题 有时在连接到 postgres 时会出现以下错误 这种情况的发生没有任何模式 当我运行一些广泛的硒测试时经常发生 警告 pg connect function pg connect 无法连接到 Postgr
  • 如何在 Web 应用程序前端强制 fetch 接受自签名证书?

    我正在制作一个简单的 Web 应用程序前端原型 它需要从我的服务器获取 JSON 数据 服务器本身工作正常 我可以单击链接 JSON 数据就会显示在浏览器中 但以下简单脚本失败了 fetch https x x x x 8000 MY UR
  • 安装前获取功能安装成本

    我们正在为您的安装制作自定义引导程序 外部 UI 我们希望提供一个 自定义安装 对话框 就像在 MSI 中一样 以允许用户选择他们想要安装或删除的功能 目前 我们能够从 MSI 数据库本身读取功能 以及其他功能详细信息 例如描述 通过在 M