【问题标题】:install/uninstall of windows services during development在开发过程中安装/卸载 Windows 服务
【发布时间】:2011-02-21 18:35:11
【问题描述】:

我想知道是否有更简单的方法可以在不创建安装包的情况下将 Windows 服务安装或卸载到开发或测试环境?有时我在卸载 Visual Studio 软件包时遇到问题(即使在卸载之前停止服务并关闭服务管理控制台后,强制我重新启动机器)。这个问题可以通过使用 InstallShield 或 WIX 等工具创建安装包来解决,但在开发过程中,如果我可以在开发或测试环境中安装服务(以及所有依赖文件)而不创建安装包,会更容易。

【问题讨论】:

  • 我亲自编写我的服务,以便它们可以作为普通应用程序或服务运行,由命令行开关确定。这使得测试、调试等变得更加容易。
  • 通常我在卸载 Windows 服务时遇到问题的唯一时间是当我在服务控制管理器仍然打开的情况下卸载时。这似乎是一个常见问题,并且一直针对我的场景进行修复。这可能会在某些时候对您有所帮助。

标签: c# windows-services windows-installer setup-deployment


【解决方案1】:

使用installutil,它是.net 框架的一部分。现在您仍然需要将 bin 目录复制到所需的机器并注册任何 COM 对象(如果您正在使用)。

【讨论】:

  • 感谢您的回复,如果windows服务引用了一些外部组件的dll,那么我应该在“C:\Program files\Company name”下创建一个带有服务名称的文件夹,然后复制所有运行 InstallUtil 之前服务文件夹下的文件?
  • installutil 是否向注册表写入内容?因为使用 Visual Studio 软件包安装的一个恼人问题是,有时它们没有被正确卸载,在注册表中留下一些痕迹,而且该服务被标记为禁用,摆脱它的唯一方法是重新启动机器跨度>
  • 您可以将文件放在任何您想要的位置,但是可以,复制所有文件然后运行 ​​installutil。正如 Adrian 在他的回答中所说,在初始安装后,您可以简单地停止服务并替换自上次安装以来已更新的文件。
  • 如果去掉服务需要重启机器安装同名服务。对于开发,只需停止服务并用新文件替换文件即可,不要卸载并重新安装服务。
【解决方案2】:

如果没记错的话(目前无法访问我的开发机器)。停止服务 - 并替换 exe 和 dll)重新启动服务。您可以编写此脚本。您需要进行初始安装,或使用 installutil.exe

我发现这总是比安装和卸载要容易得多。

【讨论】:

  • 这很酷。所以一旦安装了服务,以后我可以停止服务,替换文件并重新启动服务,这样就可以工作而不必每次都安装和卸载?对吗?
  • 这就是我以前做的。甚至有一个 bat 脚本可以在两次敲击键盘的情况下完成...
  • 可能我只是在重复你所说的话,但只是仔细检查我是否理解正确。我在想每次我想部署更新的服务时都需要安装、卸载
  • 我在看到您对我的评论的回复之前发表了我的评论。谢谢,很有用。
【解决方案3】:

我发现 SC.EXE 命令在开发过程中很容易使用。将其放入 NAnt/BuildBuild/Perl/BAT 文件中并立即实现轻量级自动化。

【讨论】:

    【解决方案4】:

    我知道这是一个老问题,但我觉得这些信息对于任何在这个问题上苦苦挣扎的人来说都是高度相关的:

    问题来自 Visual Studio 中包含的安装程序的更改。我认为变化发生在 VS2005 和 VS2008 之间。无论如何,在更改之后,要让更新安装程序在不卸载之前的产品的情况下正常工作,建议在安装、提交和回滚阶段通过自定义操作安装服务,而不是在卸载阶段。我相信这是因为更改导致安装新版本后发生卸载操作,更新时卸载您的服务。 “Not PREVIOUSVERSIONSINSTALLED”的条件放置在 3 个自定义操作上,并且检查以前的版本必须为 TRUE。这与在旧文件上复制文件的结果基本相同(但也会保留任何其他安装活动,例如注册对象等)

    这一切都非常适合更新;新版本将安装在现有版本上,服务保持注册状态,一切都很好。但是,如果您卸载,您的服务将保持注册状态,并且全新安装将尝试再次注册它,从而导致 1001 错误。我在卸载时使用 SC.EXE 手动删除服务以避免这种情况。您可以完全卸载,但它会中断更新安装,您可以选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 2018-10-30
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多