如何从c#调用ChangeServiceConfig2?

时间:2016-06-06 08:39:32

标签: c# pinvoke marshalling

我想p /调用windows api函数ChangeServiceConfig2来设置服务的描述和/或“start delayed”标志(可能还有更多)。关于这一点的特殊之处在于它根据你想要改变的内容指向不同的结构。

例如,要更改服务的描述文本,您需要将其指向SERVICE_DESCRIPTION结构并更改延迟标记,您将指向SERVICE_DELAYED_AUTO_START_INFO结构。

我已经通过创建api函数的几个重载来解决这个问题:

   private static extern bool ChangeServiceConfig2(IntPtr hService, int dwInfoLevel, [MarshalAs(UnmanagedType.Struct)] ref SERVICE_DESCRIPTION lpInfo);
   private static extern bool ChangeServiceConfig2(IntPtr hService, int dwInfoLevel, [MarshalAs(UnmanagedType.Struct)] ref SERVICE_DELAYED_AUTO_START_INFO lpInfo);

我想问一下,如果我想完全原型化,是否有更好的解决方案不需要另外十几个重载?

1 个答案:

答案 0 :(得分:0)

刚看了一下ServiceInstaller类的代码,发现他们正在以同样的方式做这件事,所以不可能都错了......

但仍然愿意接受建议。