Windows安装程序:msidAction()返回错误\u函数\u未\u调用
我正在为一个有几个先决条件的产品编写一个引导程序。为了确定要安装哪些prereq,我使用MSI AppSearch 引导程序使用Windows安装程序:msidAction()返回错误\u函数\u未\u调用,windows,installation,windows-installer,action,Windows,Installation,Windows Installer,Action,我正在为一个有几个先决条件的产品编写一个引导程序。为了确定要安装哪些prereq,我使用MSI AppSearch 引导程序使用::MsiOpenPackageEx()打开myproduct.msi包,然后调用::MsiDoAction(“AppSearch”)加载属性,最后获取感兴趣的属性以确定需要加载哪些预请求。然后关闭prereqs会话(::MsiCloseHandle()),这样它就不会干扰prereqs安装程序使用的任何MSI会话。最终(在安装了prereq之后),引导程序运行msie
::MsiOpenPackageEx()
打开myproduct.msi包,然后调用::MsiDoAction(“AppSearch”)
加载属性,最后获取感兴趣的属性以确定需要加载哪些预请求。然后关闭prereqs会话(::MsiCloseHandle()
),这样它就不会干扰prereqs安装程序使用的任何MSI会话。最终(在安装了prereq之后),引导程序运行msiexec/i myproduct.msi
我想通过调用一个自定义操作::MsiDoAction(“MyExtendedAppSearch”)
来扩展此功能,该操作将在prereqs会话期间填充其他MSI属性,使用WMI执行MSI AppSearch无法执行的搜索。但是,当我调用该操作时,它返回ERROR\u FUNCTION\u NOT\u CALLED
。在实际安装会话中调用相同的操作时,效果很好
我已经用C.dll和VBScript(嵌入的,Binary
table,没关系)试过了。显然,在实际安装中,有一些初始化是我没有做的。或者,我没有在操作上设置正确的标志位,或者应该在InstallExecuteSequence
中安排它(或者不设置,或者其他)
非常感谢您的指导。提前谢谢。@Cosmin Pirvu:它根本没有计划,也没有在任何序列表中。它只存在于CustomAction表中,由chainer程序显式调用 没关系,伙计们。错误警报/草率的程序员 元解决方案:仔细阅读前任的代码,并更仔细地阅读文档 解决方案:
::正在使用MSIOPENPACKAGEFLAGS\u IGNOREMACHINESTATE
标志调用MsiOpenPackageEx()
。根据MSI文档,使用该标志返回无法调用.dll、.exe或脚本自定义操作的受限会话句柄
不传递该标志——或者,等效地,调用
::MsiOpenPackage()
(noEx
)——将返回一个不受限制的句柄,该句柄可以.dll、.exe或脚本自定义操作。在哪个标准操作之后安排自定义操作,在哪个序列表中?MsidAction只能调用UI操作并执行InstallInitialize之前计划的操作。您是否尝试在AppSearch之后立即安排自定义操作?