1

遇到大问题。我读到 Rob M 说要Guid="*"尽可能使用,所以我把我所有的 Guid 都改成了这个。不过,现在卸载我的产品很麻烦。文件已成功删除,但快捷方式、服务和注册表未成功删除。请帮忙

这是我的服务:

  <Component Id="service" Guid="*">
    <File Id="service.exe" Name="service.exe" KeyPath="yes" Source="$(var.Bin)\service.exe"/>
    <ServiceInstall Id="service.exe" Name="[PRODUCTNAME]" Description="[ProductName]" Account="[SERVICEACCOUNT]" Password="[SERVICEPASSWORD]" Arguments=" /start [ProductName]" Start="auto" Interactive="yes" Type="ownProcess" Vital="yes" ErrorControl="critical" />
    <ServiceControl Id="service.exe" Name="[PRODUCTNAME]" Stop="both" Start="install" Remove="uninstall" Wait="no"/>
  </Component>

这是卸载日志:

Service '' () could not be stopped. Verify that you have sufficient privileges to stop system services.

MSI (s) (DC:D0) [14:25:02:018]: Executing op:  ActionStart(Name=DeleteServices,Description=
Deleting services
,Template=
Service: [1]
  )
  MSI (s) (DC:D0) [14:25:02:018]: Executing op:     ProgressTotal(Total=2,Type=1,ByteEquivalent=1300000)
MSI (s) (DC:D0) [14:25:02:018]: Executing op: ServiceControl(,,Action=8,Wait=0,)
MSI (s) (DC:D0) [14:25:32:064]: Executing op: ServiceControl(,Name=OPC,Action=8,Wait=0,)


Info 1922.

Service '' () could not be deleted. Verify that you have sufficient privileges to remove system services.

它没有取名,有人知道它为什么会这样做吗?

4

3 回答 3

3

首先是第一个问题:

  • 您是否已经发布过该产品的版本?如果是这样,更改组件 GUID 可能会严重违反组件规则,因此一旦发布就不应更改它们。如果它只是在你的测试机器上,那并不重要。
  • 您是否正在重置您的测试机器,以便违反组件规则不会影响卸载,或者您是否尝试在卸载失败之前执行某种升级?
  • 来自卸载的详细 MSI 日志表示什么?
于 2012-11-07T12:57:10.417 回答
1

您的属性“PRODUCTNAME”是如何定义的?如果它不是常量,请验证它的初始化是在卸载序列期间执行的

于 2012-11-08T14:41:18.080 回答
0

MSIZAP将是消除安装程序在机器上安装的所有内容的终极方法。我确实建议您在您正在尝试做的事情的概念证明上对其进行测试,并使用 VM 进行所有安装测试。

于 2012-11-07T20:33:09.200 回答