c# - 将现有服务设置为 "Auto (Delayed start)"

标签 c# service

我试图在 C# 中将一个已安装 的 Windows 服务设置为自动延迟启动。如何将 Windows 服务设置为

Automatic (Delayed Start) 

在 ServiceStartMode 枚举中找不到该值。

编辑:1

public class ServiceAutoStartInfo
{
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    private struct SERVICE_DELAYED_AUTO_START_INFO
    {

        public bool fDelayedAutostart;
    }

    [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Auto)]
    [return: MarshalAs(UnmanagedType.Bool)]
    private static extern bool ChangeServiceConfig2(IntPtr hService, int dwInfoLevel, IntPtr lpInfo);

    // Service configuration parameter 
    const int SERVICE_CONFIG_DELAYED_AUTO_START_INFO = 3;

    public bool ChangeDelayedAutoStart(IntPtr hService, bool delayed)
    {


        // Validate service handle
        if (hService != IntPtr.Zero)
        {


            // Create 
            SERVICE_DELAYED_AUTO_START_INFO info = new SERVICE_DELAYED_AUTO_START_INFO();

            // Set the DelayedAutostart property
            info.fDelayedAutostart = delayed;

            // Allocate necessary memory
            IntPtr hInfo = Marshal.AllocHGlobal(Marshal.SizeOf(

            typeof(SERVICE_DELAYED_AUTO_START_INFO)));

            // Convert structure to pointer
            Marshal.StructureToPtr(info, hInfo, true);

            // Change the configuration
            bool result = ChangeServiceConfig2(hService, SERVICE_CONFIG_DELAYED_AUTO_START_INFO, hInfo);

            // Release memory
            Marshal.FreeHGlobal(hInfo);

            return result;
        }

        return false;
    }
}

我是这样调用它的:

var controller = new ServiceController(s.ServiceName);
var autoDelay = new ServiceAutoStartInfo();
autoDelay.ChangeDelayedAutoStart(controller.ServiceHandle.DangerousGetHandle(), true);

但没有结果。

最佳答案

研究调用 Windows ChangeServiceConfig2函数,dwInfoLevelSERVICE_CONFIG_DELAYED_AUTO_START_INFOSERVICE_DELAYED_AUTO_START_INFO 结构,fDelayedAutostart 设置为 TRUE .

或者,您可以使用命令行执行此操作:

sc.exe config <servicename> start= delayed-auto

关于c# - 将现有服务设置为 "Auto (Delayed start)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23270920/

相关文章:

c# - .NET 的 OLE 容器

C#:从列表填充列表框的最简单方法

reporting-services - 基于参数选择的 SSRS 隐藏列

java - 从android服务启动的线程是否与服务一样运行?

c# - 使用 WMI COM 对象监视远程服务

c# - 如何获取特定节点的值

c# - 锁定构造函数导致空引用?

c# - 如何缩短代码?

javascript - 为什么使用 'new' 创建 Angular.js 服务?

c# - 单程服务方式能保证送达吗?