使用可覆盖属性时如何按命令行卸载 MSI 包?
Posted
技术标签:
【中文标题】使用可覆盖属性时如何按命令行卸载 MSI 包?【英文标题】:How to uninstall a MSI-Package per commandline when using overridable properties? 【发布时间】:2014-12-01 07:46:47 【问题描述】:我使用 WiX 3.8 制作了一个 MSI 包,其中包含一个名为“INSTALLLOCATION”的安装文件夹的属性。 通常 MSI 包由设置属性的 Bootstrapper-Bundle 调用。 在 MSI 中,该属性的定义如下:
<Property Id="INSTALLLOCATION"
Value="ProgramFilesFolder"
Hidden="no"/>
如您所见,ProgramFilesFolder 是默认值。 现在我们希望 - 与引导程序并行 - 有可能通过命令行安装 MSI 包。 所以我发送以下命令:
msiexec /i Setup.msi INSTALLLOCATION=C:\MyApplication
MSI 将安装在正确的位置。 到目前为止,一切顺利。
但是当我尝试通过 ControlPanel/Programs 或命令行卸载它时,它不起作用,因为默认值“ProgramFilesFolder”。 即使我尝试以下命令:
msiexec /u Setup.msi INSTALLLOCATION=C:\MyApplication
我该怎么做才能卸载?
【问题讨论】:
请扩展“它不起作用”。没有明确的理由为什么不知道 INSTALLLOCATION 会导致卸载失败,除非您有一些依赖它的代码(自定义操作?)不需要告诉 Windows 文件的安装位置。 【参考方案1】:这是我的错! RemoveFolder-entry 是错误的。 当您使用这样的目录层次结构时
<Directory Id="TARGETDIR"
Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLLOCATION"
Name="InstallLocation">
<Directory Id="CompanyFolder"
Name="MyCompany">
<Directory Id="INSTALLDIR"
Name="MyApp" />
</Directory>
</Directory>
</Directory>
必须是:
<RemoveFolder Id="INSTALLDIR"
On="uninstall"/>
就是这样。
【讨论】:
以上是关于使用可覆盖属性时如何按命令行卸载 MSI 包?的主要内容,如果未能解决你的问题,请参考以下文章