2011-03-25 184 views
1

虽然卸载VS2010安装项目我正在开发其安装一个服务,我收到以下错误(从详细MSI日志记录拍摄):Windows安装程序错误卸载服务(无法打开键未知)

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安装程序详细日志分析器(wilogutl),它告诉我这段代码是安装程序日志中的第一个错误。此外,它告诉我可能的解决方案:

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

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

MSI(一个或多个)(84:A4)[13:37:55:306]: 产品 {EDD4BD1F-4046-4042-8E68-A32BAC5902FD} 进行管理。 MSI(s)(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]'

+0

我想以某种方式损坏封装的组件之一。你可以发布一个链接到完整的日志,所以我们可以看看吗? – 2011-03-28 06:28:16

回答

1

好的,我从另一位开发人员那里得到了一些帮助,结果问题是用于安装软件的用户帐户是一个域用户帐户,它有权创建注册表项,但没有在卸载过程中删除它们的权限。

此过程在注册表中留下很多密钥,导致卸载/重新安装时出现问题。

解决的办法是将自己添加为计算机管理下的本地用户帐户。接下来,我不得不将这个用户分配给用户和管理员组(为了好的措施)。最后,我必须进入注册表并找到所有软件注册表项的残余并强制删除它们。

这不是一件容易的事情,因为删除涉及约六步一键一个键的值,当你右键单击并选择权限的过程:

  • 授予完全访问权限的管理员帐号
  • 授完全访问用户帐户
  • 单击高级,并添加我的域用户帐户
  • 将业主和“尝试”添加管理员作为所有者(W /递归儿童适用)
  • 回到用户选项卡,授予完全控制到我的域用户帐户
  • 单击确定,确定,然后我可以删除键
相关问题