如何解决卸载MSI安装包时出现Error 2911无法删除C:\Config.Msi\的问题?
卸载MSI时出现Error 2911:无法移除C:\Config.Msi\文件夹的解决方法
我有一个会创建桌面快捷方式的MSI安装程序,相关配置代码如下:
<Shortcut Id="SC.Desktop" Directory="DesktopFolder" Name="!(bind.Property.ProductName)" WorkingDirectory="INSTALLDIR" Target="[INSTALLDIR]testfile.txt" /> <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="integer" Name="DesktopIcon" Value="1" KeyPath="yes" />
安装过程一切正常,详细日志中无报错;但卸载时详细日志出现报错:
DEBUG: Error 2911: Could not remove the folder C:\Config.Msi\.
解决方案
Error 2911是Windows Installer清理临时目录时的常见错误,和当前配置的快捷方式、注册表项无直接关联,可按以下步骤排查解决:
- 手动清理临时目录:尝试直接删除
C:\Config.Msi\文件夹,若提示被占用,重启系统后再执行删除操作,之后重新尝试卸载。 - 排查进程占用:使用任务管理器检查是否有进程正在占用
C:\Config.Msi\下的文件,结束对应进程后再卸载。 - 调整组件KeyPath配置:将组件的KeyPath从注册表项改为快捷方式,避免组件清理逻辑冲突。修改后的组件示例:
<Component Id="CMP_DesktopShortcut" Guid="PUT-YOUR-UNIQUE-GUID-HERE" KeyPath="yes"> <Shortcut Id="SC.Desktop" Directory="DesktopFolder" Name="!(bind.Property.ProductName)" WorkingDirectory="INSTALLDIR" Target="[INSTALLDIR]testfile.txt" /> <RegistryValue Root="HKCU" Key="Software\[Manufacturer]\[ProductName]" Type="integer" Name="DesktopIcon" Value="1" /> </Component>
将组件的KeyPath="yes"设置在组件本身,而非注册表项,让Windows Installer以快捷方式作为组件的标识,减少清理时的潜在问题。
- 生成详细卸载日志定位问题:通过命令行执行卸载并生成完整日志,命令如下:
msiexec /x {你的产品GUID} /l*v uninstall_full.log
查看日志中Error 2911前后的记录,确认具体是哪个文件或操作导致目录无法删除,针对性处理。
内容的提问来源于stack exchange,提问作者M P
相关产品推荐
相关产品推荐

