gpt4 book ai didi

WiX 工具集 - 一次检查所有安装先决条件(条件安装)

转载 作者:行者123 更新时间:2023-12-04 02:48:09 25 4
gpt4 key购买 nike

WiX 工具集允许创建条件安装以检查系统上是否安装了所有先决条件。问题是这个条件是单独检查的。我想在一个列表中向用户显示所有尚未安装的先决条件。有什么方法可以在 WiX 中实现这一点?

最佳答案

在 Fragment 或 Product 元素下使用时,WiX Condition 元素表示 LaunchCondition Table 中的一个条目并由 LaunchConditions Action 处理.您看到的行为是该底层功能的限制。

这是我 7 年前写的一篇关于此的博客文章:

Short Comings of LaunchConditions

遗憾的是,Microsoft 从未采纳我的改进建议。因此,您必须编写自己的自定义表和自定义操作来执行处理,而不是使用 Condition 元素。

我在 InstallScript 和 C# 中有这方面的示例代码,但我从未用 C/C++ 编写过。

这是 InstallScript 中的精简示例。将其作为用于在 C/C++ 中重构的伪代码阅读。您还需要创建 SQL 查询使用的自定义表,定义和安排自定义操作(我通常将其安排在 FindRelatedProducts 之后),还需要创建一个用于显示错误文本的自定义对话框。所有这些都是不包括在内的 WiX XML。

hDatabase = MsiGetActiveDatabase(hMSI);
MsiDatabaseOpenView(hDatabase, "SELECT `Condition`, `Description` FROM `CustomLaunchConditions` ORDER BY `Ordering`", hView );
MsiViewExecute(hView, 0);

if( MsiViewFetch(hView, hRecord) == ERROR_SUCCESS ) then
loop = TRUE;
while(loop)
nvBufferSize = MAX_STRING;
MsiRecordGetString(hRecord, 1, svProperty, nvBufferSize );

if(!MsiEvaluateCondition(hMSI, svProperty)) then
nvBufferSize = MAX_STRING;
MsiRecordGetString(hRecord, 2, svValue, nvBufferSize );
hFormatRecord = MsiCreateRecord(1);
MsiRecordSetString(hFormatRecord, 0, svValue);
nvBufferSize = MAX_STRING;
MsiFormatRecord(hMSI, hFormatRecord, svResult, nvBufferSize);
svWarningMessage = svWarningMessage + svResult + "\r\n";
endif;

if( MsiViewFetch(hView, hRecord) != ERROR_SUCCESS) then
loop = FALSE;
endif;
endwhile;
MsiSetProperty(hMSI, "CustomLaunchConditionsText", svWarningMessage);
endif;

关于WiX 工具集 - 一次检查所有安装先决条件(条件安装),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18404067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com