我正在尝试根据应在自定义操作中设置的值安装两个功能之一。
首先,我设置一个属性的值:
UINT __stdcall ConfigurationCheckAction(MSIHANDLE hInstall)
{
HRESULT hr = S_OK;
UINT er = ERROR_INSTALL_FAILURE;
hr = WcaInitialize(hInstall, "ConfigurationCheckAction");
if (condition) {
MsiSetProperty( hInstall, TEXT("STREAM"), TEXT("RED") );
}
else {
MsiSetProperty( hInstall, TEXT("STREAM"), TEXT("BLUE") );
}
return WcaFinalize(er);
}
其次,我为每两个特征设定两个条件:
<Feature Id='Complete' Level='1'>
<Feature Id="Red" ConfigurableDirectory="TARGETDIR" Title="F1" Level="0">
<Condition Level="1">STREAM</Condition>
</Feature>
<Feature Id="Blue" ConfigurableDirectory="TARGETDIR" Title="F2" Level="0">
<Condition Level="1">NOT STREAM</Condition>
</Feature>
</Feature>
请注意,我之前没有在 wxs 文件内定义属性,因为我想从自定义操作中设置它。
我的自定义操作在 InstallInitialize 之前调用,并且立即执行。
从安装日志中,我确认该属性已设置。
但是,我的条件安装不起作用,因为条件中的内容似乎总是被评估为错误。
我尝试评估条件:
流、流=红色、流=红色、
我不知道该做什么,希望得到帮助。
测试所有这些已经太晚了,但这里提供了一些信息。我明天再回来查看。本质上,我认为问题在于您的自定义操作顺序。在成本计算之前尝试一下。
需要考虑的一些事项:
-
Custom action sequencing: you need to sequence your custom action right and it needs to be present in both silent and interactive installation modes.
- 您之前是否尝试过对设置属性自定义操作进行排序
CostInitialize
?您声明您在 InstallInitialize 之前设置它,但在 CostInitialize 之前尝试它(您可能已经尝试过)。
- 您是否记得将此自定义操作插入到
InstallUISequence
以及InstallExecuteSequence
?您需要插入两个序列,以防安装程序在静默模式下运行。前CostInitialize
我相信在这两个序列中。
-
Feature Level: manipulating features via the feature level https://msdn.microsoft.com/en-us/library/windows/desktop/aa368585(v=vs.85).aspx and INSTALLLEVEL https://msdn.microsoft.com/en-us/library/windows/desktop/aa369536(v=vs.85).aspx is just one way to do feature control, you can also set features via the command line or using a custom action.
- 将功能级别设置为 0 应该会在设置的自定义对话框中隐藏该功能。
- 将功能级别设置为高于安装程序的 INSTALLLEVEL 将从安装中取消选择该功能。
- 相反,将功能级别设置为低于或等于安装程序的 INSTALLLEVEL 将选择要安装的功能。
-
条件语法 https://msdn.microsoft.com/en-us/library/windows/desktop/aa368012%28v=vs.85%29.aspxallowed 非常灵活,可以提供您完全需要的功能 - 但我从未正确使用过它们。这是来自 Installshield 论坛的示例 https://community.flexerasoftware.com/showthread.php?171535-Feature-State-vs-Feature-Action-in-Basic-MSI.
-
添加本地和删除:您可以通过更改值来操纵特征选择ADDLOCAL https://msdn.microsoft.com/en-us/library/windows/desktop/aa367536%28v=vs.85%29.aspx and REMOVE https://msdn.microsoft.com/en-us/library/windows/desktop/aa371194(v=vs.85).aspx来自自定义操作的属性(技术上也是重新安装和广告) - 这些属性也可以通过命令行设置。
-
Win32:您还可以使用Win32函数MsiGetFeatureState https://msdn.microsoft.com/en-us/library/windows/desktop/aa370117(v=vs.85).aspx and MsiSet功能状态 https://msdn.microsoft.com/en-us/library/windows/desktop/aa370387(v=vs.85).aspx- 来自 C++ 自定义操作 - 设置功能选择。
坦白说,整件事有点疯狂。另请记住,有特征动作状态(某个功能将会发生什么)以及功能安装状态(它处于什么状态)。 Win32函数文档应该有解释。
交联方便检索:
- 正在安装未选择的功能 https://stackoverflow.com/questions/50515993/unselected-feature-being-installed/50556535#50556535
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)