Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows安装程序:msidAction()返回错误\u函数\u未\u调用_Windows_Installation_Windows Installer_Action - Fatal编程技术网

Windows安装程序:msidAction()返回错误\u函数\u未\u调用

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

我正在为一个有几个先决条件的产品编写一个引导程序。为了确定要安装哪些prereq,我使用MSI AppSearch

引导程序使用
::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()
(no
Ex
)——将返回一个不受限制的句柄,该句柄可以.dll、.exe或脚本自定义操作。

在哪个标准操作之后安排自定义操作,在哪个序列表中?MsidAction只能调用UI操作并执行InstallInitialize之前计划的操作。您是否尝试在AppSearch之后立即安排自定义操作?