我已经通过WIX创建了一个MSI,它使用以下代码在安装过程结束时运行可执行文件:
<CustomAction Id="ExecAction" Return="asyncNoWait" Execute="deferred" BinaryKey="ApplicationExe" ExeCommand="" />
<InstallExecuteSequence>
<Custom Action="ExecAction" After="InstallInitialize"><![CDATA[Not REMOVE]]></Custom>
</InstallExecuteSequence>
通过双击MSI从GUI运行时,这可以正常工作。当通过msiexec / i从命令行运行时,它也适用于大多数 Windows PC。
但是,在某些 Windows PC上,从命令行运行时,安装程序无法运行可执行文件,而是弹出一个对话框,指示它正在尝试运行.tmp文件和询问应该使用哪个程序来运行它。这在Windows 7与Windows 10上略有不同,但实际上“Windows无法打开此文件......您想用什么程序来运行MSIxxxx.tmp?”。
我查看了详细的安装程序日志,并将“好”日志与“坏”日志进行了比较,但没有任何错误,并且没有任何问题跳出来作为问题。
熟悉CustomActions的人是否知道如何解决这个问题?我们真的对这个感到困惑。
答案 0 :(得分:1)
.tmp是正常的 - 日志会显示如下条目:
调用远程自定义操作。 DLL:C:\ DOCUME~1 \ Fred \ LOCALS~1 \ Temp \ MSI540.tmp
与从二进制表流式传输的任何内容类似,以便调用或运行。它减少了某人试图运行exe或调用Dll的机会,而CreateProcess等API并不关心后缀 - 这是一个shell的事情。
我的猜测是AV产品可能会以某种方式干扰。发布MSI日志的相关部分可能是有用的,以防万一有可能显示某些内容的错误,但这种类型的进程启动不应该像是一个shell执行点击一样一份文件。 CreateProcess()调用已失败并恢复为shell命令,并且Explorer类型的消息框永远不应显示延迟的自定义操作。查看哪个进程拥有该消息框也可能很有用。