0

我在 Visual Studio 2010 中创建了一个新的 Windows 服务项目,并添加了一些代码来将信息输出到事件查看器。每次我做一点改变时,我都会做以下事情:

  1. 停止服务
  2. 卸载服务
  3. 关闭我的服务窗口。
  4. 确保任务管理器中没有运行 mmc 的实例
  5. 重新安装服务

当我尝试第 5 步时,安装失败。如果我再次尝试卸载它,我会收到“此服务已被标记为删除”。如果不重新启动,我将无法再次安装该服务。这是非常不方便的。

我在网上搜索过,这就是我包含第 3 步和第 4 步的原因。这对我不起作用。问题必须在我的计算机上,因为我在 VM 实例上卸载和安装服务没有问题。

我在 Windows 7 上并在 Visual Studio 2010 上用 C# 编写我的服务。

4

4 回答 4

3

您实际上不需要为每一个小改动都卸载该服务。您只需要确保该服务完全停止,并且您可以覆盖构成该服务的 DLL,然后重新启动它。

于 2013-09-12T12:28:39.547 回答
0

而不是通过手动过程描述从命令提示符运行以下命令:

sc 删除 [服务名称]

于 2013-09-12T12:27:07.253 回答
0

sc delete 不会从注册表中删除事件源,并且您的服务日志仍然存在。运行 regedit 并使用您的服务名称查找条目 - 如果事件日志仍有结果​​,您可以删除它们。应该有帮助,特别是如果您的服务与您的事件日志同名

有时服务窗口会出现这种奇怪的行为。我注意到,如果在您尝试卸载服务时它是打开的,它只会被安排删除,而不是实际删除。所以切换你的第 2 点和第 3 点。

此外,您可以制作 .bat 文件并在那里调用 installutil.exe 来卸载您的服务。只有它必须是正确的 installutil.exe - 您的机器上可能有多个:对于不同的框架,x86 x64... 它必须适合您的配置。

除非您真的需要它,否则请记住保持该服务窗口关闭:)

@ECHO OFF

REM The following directory is for .NET 2.0 on x64 system
set DOTNETFX2=%SystemRoot%\Microsoft.NET\Framework64\v2.0.50727
set PATH=%PATH%;%DOTNETFX2%

echo Uninstalling WindowsService...
echo ---------------------------------------------------
InstallUtil /u "path to your service"
echo ---------------------------------------------------
echo Done.
于 2013-09-12T12:49:21.623 回答
0

尝试删除 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services 下的服务密钥。

于 2013-09-12T12:50:35.830 回答