加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 21:19:28 所属栏目:百科 来源:网络整理
导读:我们在 Windows 2003中使用WCF托管服务时出现问题. 我们找到了一个命令行工具(httpcfg),它帮助我们暂时解决了这个问题. 以下命令行参数需要在服务安装后运行: httpcfg set urlacl -u http://+:8080/ -a "D:(A;;GX;;;S-1-5-21-490459244-4280451753-31202603
我们在 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清理注册来“解决”,你认为(!)是孤立的(或允许更多的内存 – 小心!)如果卸载程序按照建议工作,这是一种皇家的痛苦并且完全没有必要.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读