杂散特性“刊登了”在卸载错误1316状态结果(Spurious feature “Advertise

2019-10-16 13:21发布

症状

用户有时会收到以下错误消息之一卸载过程中,通过添加/删除程序(或“应用和功能”设置应用程序):

  • 错误1316指定的帐户已经存在。

  • 而尝试从文件读取错误1316年出现网络错误:C:\ WINDOWS \ Installer程序\ NameOfOriginalSetup的.msi

其实这两个是完全一样的错误,第一条消息只显示了KB2918614(又名“安全修复”补丁),安装时,产品是不是白名单。 这只是错误代码被误认为是一般的系统错误 ,而不是实际的MSI错误在这种情况下。 否则,KB2918614无所谓。

  • 错误1406无法写入值的关键。 请确认您有足够的权限访问该密钥,或与支持人员联系。

似乎是不太常见的。 由于该消息框包含一个“忽略”按钮,它允许卸载反正继续,用户propably不太愿意报告此错误。

日志文件

通过获得卸载日志文件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”有“ 安装:广告 ”的状态,虽然功能是本地安装。 “ 动作:本地 ”的组件“文件2”匹配我们在日志中看到的,这是Windows安装程序想要卸载过程中本地安装的文件! 同样,这没有任何意义,我。

注册表缺陷

我发现,对问题的机器,产品的随机成分注册表项不能被卸载,缺失:

HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\<ComponentKey>

后手动添加缺少的注册表项,包括全新安装状态的所有值,该产品可以成功卸载。

事实证明,任何组件注册表项丢失的情况下,Windows安装程序确定包含这些成分,被“标榜”的功能的状态。 这仍然不足以引起卸载错误1316。 事实上,只有当组件文件在物理磁盘上的缺失,对本地副本试图通过Windows安装程序触发。

最小实施例和再现步骤

我还没有能够重现问题“自然”,即以同样的方式,因为它发生在客户机。 只有通过手动删除上述组分的注册表项之一,我可以人为地重现该问题。

  1. 构建最小的WiX的设置是安装两个文件,“FILE1.TXT”和“FILE2.TXT”:
<?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>
  1. 安装MSI文件。

  2. 删除属于组件“文件1”下面的注册表项:

     HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\60F9189154DD84B4DB0018D0FEC72079 
  3. 删除属于任何相同功能的其他组件,在这种情况下,“文件2”的密钥文件:

     c:\Program Files\zett42\SpuriousFeatureAdvTest1\File2.txt 
  4. 尝试卸载通过“添加/删除程序”或“应用程序和功能”的产品。

  5. 卸载失败,出现“Error 1316”的字样。

尝试的解决方案/解决方法

支持 :微软程序安装和卸载问题排查成功删除有问题的产品。

我试图禁用该功能( 广告 <Feature AllowAdvertise="no"/>但它不会改变任何东西。

可能是什么问题的可能原因,以及如何真正解决呢?

  • 在建立成分违反规则。 虽然我不能排除这个原因,这似乎不太可能,因为缺少的组件注册表项(S)是随机的,只有用户的一小部分会受到影响。
  • 的第三方软件,如AV或注册表清理实用程序的干扰。
  • 磁盘或存储故障。
  • 错误的Windows安装程序。
  • 还要别的吗?

搜索错误信息显示,这个问题是相当普遍的。 在某些情况下,该错误是由微小的升级过程中改变了MSI的文件名引起的。 这绝对不是这里的情况,因为我们没有做轻微的升级和有问题的设置的MSI文件没有重命名。 正如上面所解释的很清楚,有一个注册表缺陷 。 一个可能类似的情况进行了说明这里 ,但得到的答复并没有解释什么,只是指向MS故障排除工具。

Answer 1:

我已经能够重现使用注册表清洁的问题。

再现步骤:

  1. 安装使用Windows Installer的程序。
  2. 删除一个或多个文件,这些文件从程序文件夹及其组件的密钥文件。
  3. 运行注册表清洁。 清洁工确定,Windows安装程序组件注册表项,谁的密钥文件不存在,则不再需要。 清洁工删除注册表项。
  4. 删除多个文件,这些文件从程序文件夹及其组件的密钥文件。
  5. 尝试卸载该程序。 它失败,错误1316。

即使没有第4步,该卸载将被打破,因为包含已删除的组件相同功能的组件安装任何其他资源,将无法卸载。 删除一个组件注册表项和整体功能将不再被卸载!

步骤4,这个问题变成一个问题,因为整个卸载将回滚。 它也可以变成一个安装问题,当卸载,因为这需要旧版本首先要扫除了一大升级的一部分运行。

虽然步骤略显得做作,这肯定不是不可能的,用户手动从程序安装文件夹中删除文件。 这也可能会不小心当程序被安装在可移动磁盘和磁盘后清洁运行已被删除发生。 其他原因可以想到的。

解:

  • 不要使用注册表清洁工。 虽然有些人可能实际工作,总是有他们碰坏的风险。
  • 如果任何程序的卸载过程中可能出现的错误或1316 1406(期间重大升级,当旧版本被删除也可能),使用微软程序安装和卸载问题排查中的“卸载”模式。 在某些情况下,您还可以通过重新运行用于安装该程序的原始安装程序包成功。


文章来源: Spurious feature “Advertised” state results in uninstall error 1316