微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我们在 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#中做同样的事情?

解决方法

我可以想到两种方法

>使用System.Diagnostics.Process运行httpcfg.exe
>使用PInvoke访问基础Win32 API HttpSetServiceConfiguration

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

> PInvoke.net: httpsetserviceconfiguration (httpapi)

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐