【问题标题】:Windows Installer Error Uninstalling a Service (could not open key UNKNOWN)Windows 安装程序错误卸载服务(无法打开密钥 UNKNOWN)
【发布时间】:2011-03-25 20:59:59
【问题描述】:

在卸载我正在开发的安装服务的 VS2010 安装项目时,我收到以下错误(取自详细的 MSI 日志记录):

MSI (c) (60:90) [13:37:59:038]: Font created.  Charset: Req=0, Ret=0, Font: Req=MS Shell Dlg, Ret=MS Shell Dlg

Error 1402. Could not open key: UNKNOWN\Components\216B73E88467B322BBFF14C949E03D05\F1DB4DDE64042404E8863AB2CA9520DF. System error 5.
Verify that you have sufficient access to that key, or contact your support personnel.
MSI (s) (84:A4) [13:38:01:678]: User policy value 'DisableRollback' is 0
MSI (s) (84:A4) [13:38:01:678]: Machine policy value 'DisableRollback' is 0
Action ended 13:38:01: InstallExecute. Return value 3.

请注意,此服务是使用本地计算机帐户或域用户帐户安装的。它不使用网络服务、本地系统或本地服务等内置帐户。

使用 Windows Installer 详细日志分析器 (wilogutl),它告诉我这部分代码是安装程序日志中的第一个错误。此外,它告诉我可能的解决方案:

标准操作或自定义操作 导致失败。

Installer Version: 5.0.7601
Client Side Privilege Details: None
Server Side Privilege Details: 

MSI (s) (84:A4) [13:37:55:306]: 产品 {EDD4BD1F-4046-4042-8E68-A32BAC5902FD} 被管理。微星 (84:A4) [13:37:55:306]:运行产品 '{EDD4BD1F-4046-4042-8E68-A32BAC5902FD}' 具有提升的权限:产品是 已分配。

我尝试运行 ProcMon 来尝试诊断问题,但没有成功。安装程序似乎运行没有问题。安装程序使用自定义操作 (C# InstallerClass) 来安装服务。但是系统无法卸载我机器上的服务。

更新 1: 以下是日志中的人类可读错误:

(SERVER)     MSI (s) (84:A4) [13:38:02:186]: Product: MyService -- Removal failed. 
(UNKNOWN)      
(SERVER)     MSI (s) (84:A4) [13:38:02:186]: Windows Installer removed the product. Product Name: MyService. Product Version: 1.0.0. Product Language: 1033. Manufacturer: ManufacturerName. Removal success or error status: 1603. 
(UNKNOWN)      
(SERVER)     MSI (s) (84:A4) [13:38:02:187]: Deferring clean up of packages/files, if any exist 
(SERVER)     MSI (s) (84:A4) [13:38:02:187]: MainEngineThread is returning 1603 

而错误1603可以解释为如下(虽然日志中没有显示):

文件 [2][3] 正在使用中 通过以下过程:名称:[4], ID:[5],窗口标题:'[6]'

【问题讨论】:

  • 我认为其中一个包组件以某种方式损坏。能否请您发布完整日志的链接,以便我们查看?

标签: windows-services windows-installer custom-action


【解决方案1】:

好的,我从另一位开发人员那里得到了一些帮助,但问题是用于安装软件的用户帐户是域用户帐户,该帐户有权创建注册表项,但在卸载期间无权删除它们.

这个过程在注册表中留下了很多导致卸载/重新安装问题的键。

解决方案是将自己添加为计算机管理下的本地用户帐户。接下来,我必须将此用户分配给用户和管理员组(只是为了更好地衡量)。最后,我不得不进入注册表,找到所有残留的软件注册表项并强行删除它们。

这绝非易事,因为当您右键单击并选择键值上的权限时,删除键的过程涉及大约六个步骤:

  • 授予对管理员帐户的完全访问权限
  • 授予用户帐户的完全访问权限
  • 点击高级并添加我的域用户帐户
  • 转到所有者并“尝试”将管理员添加为所有者(应用了递归子级)
  • 返回用户选项卡,授予对我的域用户帐户的完全控制权
  • 点击确定和确定,然后我就可以删除密钥了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 2011-12-10
    • 2016-03-08
    • 2022-07-23
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多