什么可能导致MSIExec错误1619'无法打开此安装包'

时间:2012-04-11 14:55:06

标签: msbuild wix windows-installer acceptance-testing

我正在尝试从一组示例程序中自动执行往返安装和卸载一组MSI文件(由WiX生成)。出于某种原因,非常乐意在双击时安装的.MSI文件会生成:

  

无法打开此安装包。验证程序包是否存在以及是否可以访问它,或与应用程序供应商联系以验证它是否是有效的Windows Installer程序包。

当我以下列方式使用MSIEXEC调用它时:

<ItemGroup>
  <_SampleMsi Include="$(_ArtifactsPathAcceptanceSamples)\**\*.msi" />
</ItemGroup>
<Exec Command="$(WixDir)\smoke &quot;%(_SampleMsi.Identity)&quot;"/>
<!--Guarantee precondition even if cleanup didn't work-->
<Exec Command="msiexec -passive -norestart -x &quot;%(_SampleMsi.Identity)&quot;" IgnoreExitCode="true"  />
<Exec Command="msiexec -norestart -i &quot;%(_SampleMsi.Identity)&quot;"  />
<!--Uninstall of every sample should also always work-->
<Exec Command="msiexec -passive -norestart -x &quot;%(_SampleMsi.Identity)&quot;" />

当我尝试根据产品ID GUID卸载时,也会出现同样的问题: -

msiexec -passive -norestart -x FC7445BB-7E1D-4E36-A42A-CFA56263E453

是什么给出了?

2 个答案:

答案 0 :(得分:10)

  1. 请勿按字面意思获取消息的文字。关于你应该得出的结论是,misexec将你的命令的某些部分视为文件名,并且它没有加载并处理它的满意度。是否因为路径太长,权限被拒绝,或者任何其他条件仅受您的想象限制(大多数知识库文章似乎与安装程序缓存问题有关,这通常是基于GUID的语法或修补/升级选项)

  2. 你错过了GUID中的大括号,傻瓜。我的意思是你确实知道GUID上有大括号,即使msiexec /?没有告诉你或告诉你?!

    即。您需要将FC7445BB-7E1D-4E36-A42A-CFA56263E453替换为{FC7445BB-7E1D-4E36-A42A-CFA56263E453}

    (我已经停止信任/读取输出,并且正在考虑GUID正在解析为msiexec不满意的缓存MSI的可能性,原因是它似乎对安装语法不满意,这就是全部这个空间中的知识库文章倾向于谈论。)

  3. 您的路径包含相对跳转,尽管其净长度为<160个字符,但总长度> 160个字符,因此基础文件API会阻塞。人们喜欢编写误导性的通用错误消息。

    您可以通过在上面使用的每个批处理表达式中将Identity替换为FullPath来解决此问题。

    另一种解决方法是use a WorkingDirectory with the Exec of msiexec

答案 1 :(得分:1)

只需删除.\,然后在文件名前添加即可。