使用c#在服务安装后传递命令行参数

时间:2011-06-09 05:34:10

标签: c# windows service installation

我们在Windows 2003中使用WCF托管服务时出现问题。 我们找到了一个命令行工具(httpcfg),它帮助我们暂时解决了这个问题。

以下命令行参数需要在服务安装后运行:

httpcfg set urlacl -u http://+:8080/ -a "D:(A;;GX;;;S-1-5-21-490459244-4280451753-3120260354-1829)"

我们需要使用C#

通过安装程序传递此参数

这是在安装程序事件之后通过服务控制器。我如何使用ServiceController在C#中执行相同的操作?

1 个答案:

答案 0 :(得分:1)

我可以想到两种方法:

第二种方法有点乱,但不是那么难。 PInvoke.net页面描述了该调用,甚至给出了一个工作示例:

编辑:有关清理问题的一些注意事项受Rob的评论启发。我把它们放在这个现有的答案中,因为它们不能自己做出好的答案。

请注意,无论您采取何种方法(httpcfg.exe或直接使用HTTP-API),请确保在卸载过程中取消注册URL。

原因是,HTTP.SYS(实际上是一个内核组件)只有很多(非分页)内存可用于管理URL保留。如果超过此值,则必须进行多次(可能是陈旧/遗留)注册,否则会出现错误,无法注册任何新网址(请参阅http://support.microsoft.com/kb/824033)。

虽然通过手动使用httpcfg.exe来清理注册,这是“可解决的”,你认为(!)是孤立的(或允许更多的内存 - 小心!)如果卸载程序按照建议工作,这是一种巨大的痛苦并且完全没有必要。< / p>