用户有时在卸载过程中通过添加/删除程序(或“应用和功能”设置应用)获得以下错误消息之一:
错误1316。指定的帐户已经存在。
错误1316。尝试从网络中读取时发生网络错误。 文件:C:\ WINDOWS \ Installer \ NameOfOriginalSetup .msi
实际上,这两个错误完全相同,仅当安装了KB2918614(也称为“安全修复”补丁)且产品未列入白名单时,才会显示第一条消息。只是在这种情况下,错误代码被误解为一般的system error而不是actual MSI error。否则,KB2918614无关紧要。
错误1406。无法将值写入key。确认您具有对该密钥的足够访问权,或与支持人员联系。
似乎不太常见。由于消息框中包含一个“忽略”按钮,无论如何该按钮都可以继续进行卸载,因此用户不太可能报告此错误。
通过msiexec -x {ProductCode} -l*vx LogFile.txt
获得了卸载日志文件。搜索“值3”会产生错误位置附近的部分:
MSI (s) (B0:9C) [15:18:10:427]: Executing op: FeatureUnpublish(Feature=ProductFeature,,Absent=2,Component=iJm4+0tc4@uTvD')YKUXZ{NA8`o569(2MdBLg[rJ)
MSI (s) (B0:9C) [15:18:10:428]: Note: 1: 1402 2: UNKNOWN\Installer\Features\AFCEC7274CC7C0441A85705C47554DD5 3: 2
MSI (s) (B0:9C) [15:18:10:428]: Executing op: ActionStart(Name=InstallFiles,Description=Copying new files,Template=File: [1], Directory: [9], Size: [6])
MSI (s) (B0:9C) [15:18:10:428]: Executing op: ProgressTotal(Total=5,Type=0,ByteEquivalent=1)
MSI (s) (B0:9C) [15:18:10:428]: Executing op: SetTargetFolder(Folder=C:\Program Files\zett42\SpuriousFeatureAdvTest1\)
MSI (s) (B0:9C) [15:18:10:428]: Executing op: SetSourceFolder(Folder=1\zett42\xipmcfby\|zett42\SpuriousFeatureAdvTest1\)
MSI (s) (B0:9C) [15:18:10:428]: Executing op: ChangeMedia(,MediaPrompt=Please insert the disk: ,MediaCabinet=1\cab1.cab,BytesPerTick=65536,CopierType=1,,,SignatureRequired=0,,,IsFirstPhysicalMedia=1)
MSI (s) (B0:9C) [15:18:10:428]: Executing op: RegisterSharedComponentProvider(,,File=File2.txt,Component={3F28EEDB-866D-4201-8173-12532C657B6C},,ProductCode={727CECFA-7CC4-440C-A158-07C57455D45D},ProductVersion=1.0.0,PatchSize=0,PatchAttributes=0,PatchSequence=0,SharedComponent=0,IsFullFile=0)
MSI (s) (B0:9C) [15:18:10:428]: Executing op: FileCopy(SourceName=File2.txt,SourceCabKey=File2.txt,DestName=File2.txt,Attributes=512,FileSize=5,PerTick=65536,,VerifyMedia=1,,,,,CheckCRC=0,,,InstallMode=58982400,HashOptions=0,HashPart1=1397189395,HashPart2=108432067,HashPart3=-1009892414,HashPart4=374579663,,)
MSI (s) (B0:9C) [15:18:10:428]: File: C:\Program Files\zett42\SpuriousFeatureAdvTest1\File2.txt; To be installed; Won't patch; No existing file
MSI (s) (B0:9C) [15:18:10:428]: Resolving source.
MSI (s) (B0:9C) [15:18:10:428]: Using cached product context: machine assigned for product: AFCEC7274CC7C0441A85705C47554DD5
MSI (s) (B0:9C) [15:18:10:428]: Using cached product context: machine assigned for product: AFCEC7274CC7C0441A85705C47554DD5
MSI (s) (B0:9C) [15:18:10:429]: Resolving source to launched-from source.
MSI (s) (B0:9C) [15:18:10:429]: Setting launched-from source as last-used.
MSI (s) (B0:9C) [15:18:10:429]: PROPERTY CHANGE: Adding SourceDir property. Its value is 'C:\WINDOWS\Installer\'.
MSI (s) (B0:9C) [15:18:10:429]: PROPERTY CHANGE: Adding SOURCEDIR property. Its value is 'C:\WINDOWS\Installer\'.
MSI (s) (B0:9C) [15:18:10:429]: PROPERTY CHANGE: Adding SourcedirProduct property. Its value is '{727CECFA-7CC4-440C-A158-07C57455D45D}'.
MSI (s) (B0:9C) [15:18:10:429]: SOURCEDIR ==> C:\WINDOWS\Installer\
MSI (s) (B0:9C) [15:18:10:429]: SOURCEDIR product ==> {727CECFA-7CC4-440C-A158-07C57455D45D}
MSI (s) (B0:9C) [15:18:10:429]: Using cached product context: machine assigned for product: AFCEC7274CC7C0441A85705C47554DD5
MSI (s) (B0:9C) [15:18:10:429]: Determining source type
MSI (s) (B0:9C) [15:18:10:429]: Note: 1: 2203 2: C:\WINDOWS\Installer\SpuriousFeatureAdvTest1.msi 3: -2147287038
MSI (s) (B0:9C) [15:18:10:429]: Note: 1: 1316 2: C:\WINDOWS\Installer\SpuriousFeatureAdvTest1.msi
MSI (s) (B0:9C) [15:18:10:429]: SECREPAIR: Error determining package source type
MSI (s) (B0:9C) [15:18:10:429]: SECUREREPAIR: SecureRepair Failed. Error code: 524FD15800
MSI (s) (B0:9C) [15:18:11:146]: Note: 1: 2205 2: 3: Error
MSI (s) (B0:9C) [15:18:11:146]: Note: 1: 2228 2: 3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1709
MSI (s) (B0:9C) [15:18:11:146]: Product: zett42 SpuriousFeatureAdvTest1 -- Error 1316. Das angegebene Konto ist bereits vorhanden.
MSI (c) (C4:38) [15:18:10:436]: Font created. Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg
Error 1316. Das angegebene Konto ist bereits vorhanden.
(最后一个日志行是德语中的“指定的帐户已经存在。”)
从日志中可以看出,卸载尝试将文件“ File2.txt”实际上复制到硬盘(查找FileCopy
条目)。这似乎没有意义,当然,当源不可用时,它也会失败。
特征和组件状态也很有趣,它们会在日志中进一步显示出来:
MSI (s) (B0:9C) [15:18:10:387]: Feature: ProductFeature; Installed: Advertise; Request: Absent; Action: Absent
MSI (s) (B0:9C) [15:18:10:387]: Component: File1; Installed: Absent; Request: Null; Action: Null; Client State: Unknown
MSI (s) (B0:9C) [15:18:10:387]: Component: File2; Installed: Local; Request: Null; Action: Local; Client State: Absent
请注意,功能“ ProductFeature”的状态为“ 已安装:广告”,尽管该功能是在本地安装的。组件“ File2”的“ 操作:本地”与我们在日志中看到的匹配,即Windows Installer希望在卸载过程中在本地安装文件 !同样,这对我来说毫无意义。
我发现在问题机器上,缺少无法卸载的产品的随机组件注册表项:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\<ComponentKey>
手动添加缺少的注册表项(包括来自全新安装状态的所有值)后,可以成功卸载产品。
事实证明,当缺少任何组件注册表项时,Windows Installer会将包含这些组件的功能的状态确定为“播发”。这仍然不足以导致卸载时出现错误1316。实际上,只有磁盘上物理上缺少组件文件时,Windows Installer才会触发尝试进行本地复制的操作。
我还不能“自然地”重现问题,即e。就像在客户计算机上发生的一样。只有手动删除上述组件注册表项之一,我才能人为地重现该问题。
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<?define ProductName = "SpuriousFeatureAdvTest1"?>
<?define Manufacturer = "zett42"?>
<?if $(var.Platform) = x64 ?>
<?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
<?else ?>
<?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
<?endif ?>
<Product Id="*" Name="$(var.Manufacturer) $(var.ProductName)" Language="1033" Version="1.0.0.0" Manufacturer="$(var.Manufacturer)" UpgradeCode="{65CEA630-EFC0-4199-86EE-88867AABEDEF}">
<Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
<MajorUpgrade DowngradeErrorMessage="A newer version of $(var.ProductName) is already installed." />
<MediaTemplate />
<Feature Id="ProductFeature" Title="$(var.ProductName)" Level="1" AllowAdvertise="no" >
<ComponentGroupRef Id="ProductComponents" />
</Feature>
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="$(var.PlatformProgramFilesFolder)">
<Directory Id="MANUFACTURERFOLDER" Name="$(var.Manufacturer)">
<Directory Id="INSTALLFOLDER" Name="$(var.ProductName)" />
</Directory>
</Directory>
</Directory>
<ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
<Component Id="File1" Guid="{19819F06-DD45-4B48-BD00-810DEF7C0297}">
<File Source="File1.txt"/>
</Component>
<Component Id="File2" Guid="{3F28EEDB-866D-4201-8173-12532C657B6C}">
<File Source="File2.txt"/>
</Component>
</ComponentGroup>
</Product>
</Wix>
安装MSI文件。
删除属于组件“ File1”的以下注册表项:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\60F9189154DD84B4DB0018D0FEC72079
删除一个密钥文件,该文件属于同一功能的任何 other 组件,在本例中为“ File2”:
c:\Program Files\zett42\SpuriousFeatureAdvTest1\File2.txt
尝试通过“添加/删除程序”或“应用和功能”来卸载产品。
卸载失败,并显示“错误1316”消息。
获得支持:Microsoft Program Install and Uninstall troubleshooter成功删除了有问题的产品。
我曾尝试禁用广告功能(<Feature AllowAdvertise="no"/>
),但它没有任何改变。
该问题可能是什么原因以及如何实际解决?
搜索错误消息表明问题很普遍。在some cases中,该错误是由在次要升级期间更改MSI的文件名引起的。在这里绝对不是这种情况,因为我们不做较小的升级并且有问题的设置的MSI文件没有重命名。如上所述,很明显,存在注册表缺陷。 here中描述了一个可能类似的情况,但是答案没有任何解释,仅指向MS故障排除工具。
答案 0 :(得分:0)
我已经能够使用注册表清理器重现该问题。
复制步骤:
即使没有第4步,此卸载也将被破坏,因为由相同功能的组件(包含已删除的组件)安装的任何其他资源都不会被卸载。删除一个组件注册表项,整个功能将不再被卸载!
在第4步中,问题变成一个问题,因为整个卸载将回滚。当卸载作为主要升级的一部分运行而需要首先删除旧版本时,它也可能会导致安装问题。
尽管这些步骤看起来有些人为,但用户从程序安装文件夹中手动删除文件肯定不是不可能。当程序安装在可移动磁盘上并且清洁器在磁盘移除后运行时,这也可能会意外发生。可以想到其他原因。
解决方案: