【问题标题】:C# - Windows Service installer fails in custom actionC# - Windows 服务安装程序在自定义操作中失败
【发布时间】:2010-12-07 11:55:48
【问题描述】:

我们通过如下所述的自定义操作安装 Windows 服务:CodeProject

有时,在卸载我们的应用程序时,它不会正确卸载服务。相反,它“将服务标记为删除”。

您可以通过在我们的可执行文件上运行 installutil.exe /u 来查看此消息,此时它应该已被卸载。

有没有人看到这个问题或知道解决方法?如果以某种方式安装了与我们相同名称的服务,我们希望替换它。相反,msi 设置失败,提示我们的服务已经安装。

有没有一种方法可以在不执行自定义操作的情况下先卸载我们服务名称的任何现有实例,然后再运行安装自定义操作?

【问题讨论】:

    标签: c# .net windows-services windows-installer installation


    【解决方案1】:

    卸载时服务控制面板 (services.msc) 是否打开?这会阻止您的服务来自correctly being uninstalled

    如果没有其他帮助,可能需要按照this article 中的建议重新启动(尽管最初适用于 .NET 1.1)。

    【讨论】:

    • 我们可能会在卸载时提示重新启动。这似乎是一个很好的解决方案。如果没有人有更好的解决方案,我会在一两天内将您标记为答案。
    • 希望您能找到比重启更好的解决方案。您是否使用 Process Explorer 检查过服务进程不再运行?如果它仍在运行,您可以使用 Process Explorer 进一步调查该进程(请参阅正在运行的线程、打开的句柄、加载的 dll)。
    • 当处于这种状态时,我们的进程不再运行并且我们的 MSI 已经从文件系统中删除了可执行文件。但是,如果您运行“net start”命令,我们的服务仍会列在 services.msc 中。可悲的是,很难重现,而且我不认为每次卸载时打开 services.msc 都会发生这种情况。重新启动似乎是唯一能真正修复它的方法,Windows 正在等待 PC 重新启动,然后再删除服务。
    • 服务控制台会不会像这家伙一样在另一个会话中打开? weblogs.asp.net/avnerk/archive/2007/09/05/…
    • 我认为你是对的,很好的链接。我们将让我们的设置提示用户关闭 mmc.exe,就像其他设置为 IE 等所做的一样。
    【解决方案2】:

    检查您的服务是否正确停止了从该服务启动的其他线程。

    【讨论】:

    • 我们所有的线程都是 ThreadPool 线程,所以这应该不是问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多