2009-10-16 58 views
0

失败,我们从一个自定义操作,安装Windows服务如下所述:CodeProjectC# - Windows服务安装的自定义动作

几乎每隔一段时间,我们的卸载应用程序时,它无法正常卸载该服务。相反,它“标记要删除的服务”。

您可以在我们的可执行文件上运行installutil.exe /u,看看这条消息是否应该被卸载。

有没有人看过这个问题或知道解决方法?如果服务以某种方式与我们的名称安装在同一个名称上,我们想替换它。相反,msi安装程序失败,给出了一条消息说我们的服务已经安装。

有没有办法做到这一点,而无需执行自定义操作来首先卸载我们服务名称的现有实例,然后再运行安装自定义操作?

回答

3

卸载时服务控制面板(services.msc)是否打开?这可以防止您的服务从correctly being uninstalled

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

+0

我们可能会提示重新启动卸载。这似乎是一个很好的解决方案。如果没有人有更好的解决方案,我会在一两天内将您标记为答案。 – jonathanpeppers 2009-10-16 20:21:56

+0

我希望你找到比重新启动更好的解决方案。您是否使用Process Explorer检查了服务进程不再运行?如果它仍在运行,您可以使用Process Explorer进一步调查该进程(请参阅运行线程,打开句柄,加载的dll)。 – 2009-10-16 20:25:20

+0

在此状态下,我们的进程不再运行,我们的MSI已从文件系统中删除可执行文件。但是,我们的服务仍然列在services.msc中,如果您运行“net start”命令。很遗憾,非常难以复制,并且我不认为每次在卸载时打开services.msc都会发生这种情况。重新启动似乎是唯一能够真正解决它的问题,Windows正在等待PC在删除服务之前重新启动。 – jonathanpeppers 2009-10-16 20:28:30

0

检查,如果您的服务正确停止从服务启动的其他线程。

+0

我们所有的线程都是ThreadPool线程,所以这不应该成为问题。 – jonathanpeppers 2009-10-16 20:20:52