修改Windows服务可执行文件的路径

时间:2018-05-15 13:26:52

标签: c# .net windows

我正在尝试编写控制台应用程序以更改Windows服务可执行文件的路径。更确切地说,它应该将服务名称作为参数,然后将服务路径更改为可执行文件。 不幸的是,我找不到任何有关如何实现这一目标的信息,也许有经验的人可以给出任何建议吗?

我在https://msdn.microsoft.com/en-us/en-en/library/system.diagnostics.process(v=vs.110).aspx找到了一些有趣的信息,但它也没有帮助我。

1 个答案:

答案 0 :(得分:0)

如果您无法致电sc.exe来执行此操作,则可以使用this answer中的互操作代码并添加如下内容:

    public static void SetWindowsServicePath(string serviceName, string binPath)
    {
        IntPtr hManager = IntPtr.Zero;
        IntPtr hService = IntPtr.Zero;
        try
        {
            hManager = OpenSCManager(null, null, SC_MANAGER_ALL_ACCESS);
            if (hManager == IntPtr.Zero)
            {
                ThrowWin32Exception();
            }
            hService = OpenService(hManager, serviceName, SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG);
            if (hService == IntPtr.Zero)
            {
                ThrowWin32Exception();
            }

            if (!ChangeServiceConfig(hService, SERVICE_NO_CHANGE, SERVICE_NO_CHANGE, SERVICE_NO_CHANGE, binPath, null, IntPtr.Zero, null, null, null, null))
            {
                ThrowWin32Exception();
            }
        }
        finally
        {
            if (hService != IntPtr.Zero) CloseServiceHandle(hService);
            if (hManager != IntPtr.Zero) CloseServiceHandle(hManager);
        }
    }

根据sc.exe,此代码需要管理员权限才能打开SCM。