65.9K
CodeProject 正在变化。 阅读更多。
Home

RWWinService - XYWinService 的简化 .NET 3.5 版本

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2010年3月2日

CPOL

2分钟阅读

viewsIcon

13923

downloadIcon

381

刘翔阳的 XYNTService/XYWinService 的分支/派生版本

引言

此项目是我个人的 刘翔阳XYWinService 分支。

在这个版本中,我利用我自己的 SimpleService 项目来添加功能并解决一些小问题。

新功能

  • 将解决方案升级到 VS2008
  • 使用app.config简化配置
  • 改进的安装/卸载服务支持
  • 控制台模式 - 用于简化调试
  • 记录到应用程序事件日志
  • 更多命令行选项

配置

我使用RWWinService在后台运行我的 fossil 源代码存储库。以下配置说明了我的实现方法。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="Process" 
      type="System.Configuration.IgnoreSectionHandler" />
  </configSections>
  <appSettings>
    <add key="CheckProcessSeconds" value="30"/>
    <add key="PauseStartMs" value="1000"/>
    <add key="PauseEndMs" value="1000"/>
  </appSettings>
  <Process>
    <FilePath>c:\rev\bin\fossil.exe</FilePath>
    <Arguments>server --port 8080 c:\rev\fossil\fossil.fossil</Arguments>
    <WorkingDir>c:\rev\bin</WorkingDir>
    <Restart>Yes</Restart>
  </Process>
  <Process>
    <FilePath>c:\rev\bin\fossil.exe</FilePath>
    <Arguments>server --port 8081 c:\rev\fossil\rwwinservice.fossil</Arguments>
    <WorkingDir>c:\rev\bin</WorkingDir>
    <Restart>Yes</Restart>
  </Process>
</configuration>

此配置文件中有一些技巧。通常,ConfigurationManager 类期望在配置中只看到appSettings 元素,如果存在意外的元素,它将抛出异常。configSections 元素允许您告诉ConfigurationManager 类通过System.Configuration.IgnoreSectionHandler忽略名为Process 及其子元素的元素。完成此操作后,您可以在代码中自行解析Process 元素。或者,您可以编写自己的SectionHandler,但我将其留给您。这为我们提供了一个简单、单一的配置文件。

三个appSettings 密钥几乎不言自明,Process 元素与XYWinService 中的完全相同。我弃用了XYWinService 中提供的几个配置项,最值得注意的是RunAs 元素。此项目假定服务将作为ServiceAccount.LocalSystem运行,并且没有公开此功能的配置选项。

清单文件

清单文件是将所有内容整合在一起的关键。其中一行配置服务以调用 Vista/Windows7 UAC。

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

管理服务

RWWinService 利用了 SimpleService 框架,因此可以使用以下命令行选项

PS C:\rev\bin> RWWinService -help
= usage:
=   RWWinService -install   == install service
=   RWWinService -uninstall == uninstall service
=   RWWinService -start     == start service
=   RWWinService -stop      == stop service
=   RWWinService -status    == get the current status of the service
=   RWWinService -console   == run in console mode
=   RWWinService -help      == show this help message

使用这些命令行开关,您可以安装和卸载服务,而无需使用InstallUtil.exe。此外,安装服务后,您可以启动和停止服务。-status 开关将告诉您服务是否已安装、启动或停止。

结论

我已经使用此服务几个月了,没有任何问题。我认为您会发现命令行界面可以节省您的时间。我非常感谢 刘翔阳 的最初贡献;从功能上讲,此 XYWinService 分支提供了相同的基本功能集,只是经过简化和重构。如有任何错误或疏忽,请随时通知我。享受!

历史

  • 2010年3月 - 初次提交
© . All rights reserved.