Rub*_*ink 6 msbuild windows-installer wix acceptance-testing
我正在尝试从一包示例程序中自动执行往返安装和卸载一组MSI文件(由WiX生成).出于某种原因,非常乐意在双击时安装的.MSI文件会生成:
无法打开此安装包.验证程序包是否存在以及是否可以访问它,或与应用程序供应商联系以验证它是否为有效的Windows Installer程序包.
当我以下列方式使用MSIEXEC调用它时:
<ItemGroup>
<_SampleMsi Include="$(_ArtifactsPathAcceptanceSamples)\**\*.msi" />
</ItemGroup>
<Exec Command="$(WixDir)\smoke "%(_SampleMsi.Identity)""/>
<!--Guarantee precondition even if cleanup didn't work-->
<Exec Command="msiexec -passive -norestart -x "%(_SampleMsi.Identity)"" IgnoreExitCode="true" />
<Exec Command="msiexec -norestart -i "%(_SampleMsi.Identity)"" />
<!--Uninstall of every sample should also always work-->
<Exec Command="msiexec -passive -norestart -x "%(_SampleMsi.Identity)"" />
Run Code Online (Sandbox Code Playgroud)
当我尝试根据产品ID GUID卸载时,也会出现同样的问题: -
msiexec -passive -norestart -x FC7445BB-7E1D-4E36-A42A-CFA56263E453
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?
Rub*_*ink 11
不要从字面上理解消息的文本.关于你应该得出的结论是,misexec将你的命令的某些部分视为文件名,并且它没有加载并处理它的满意度.是否因为路径太长,权限被拒绝,或者任何其他条件仅受您的想象限制(大多数知识库文章似乎与安装程序缓存问题有关,这通常是基于GUID的语法或修补/升级选项)
你错过了GUID中的大括号,傻瓜.我的意思是你确实知道GUID上有大括号即使msiexec /?没有告诉你或给你看?
例如,你需要更换FC7445BB-7E1D-4E36-A42A-CFA56263E453与{FC7445BB-7E1D-4E36-A42A-CFA56263E453}
(我已经停止信任/读取输出,并且正在考虑将GUID解析为msiexec不满意的缓存MSI的可能性,因为它似乎对安装语法不满意,这就是所有知识库文章在这个空间里倾向于谈论.)
您的路径包含相对跳转,尽管净长度<160个字符,但总长度> 160个字符,因此底层文件API会阻塞.人们喜欢编写误导性的通用错误消息.
您可以通过Identity在使用FullPath的每个批处理表达式中替换上面来修复它.
弥补它的另一种方法是使用WorkingDirectory与Exec中msiexec
| 归档时间: |
|
| 查看次数: |
15610 次 |
| 最近记录: |