怎么利用c#修改services的Startup type

我们知道大部分的services的操作可以通过ServiceController来实现,包括services的开启,停止,暂停,还有获取service的status。但是这里关于services的修改Startup type这点,貌似ServiceController不好做到,我们可以这样来做:


代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;

namespace ServicesStartup
{
    class Program
    {
        public enum StartupType
        {
            Automatic,
            Disabled,
            Manual
        }

public static void SetStartupType(string serviceName, StartupType startupType)
        {
            string type = startupType.ToString();
            try
            {
                ManagementPath mp = new ManagementPath(string.Format("Win32_Service.Name='{0}'", serviceName));
                if (mp != null)
                {
                    using (ManagementObject mo = new ManagementObject(mp))
                    {
                        object[] parameters = new object[1] { type };
                        mo.InvokeMethod("ChangeStartMode", parameters);                       
                    }
                }
            }
            catch (ManagementException ex)
            {
                Console.WriteLine("An error occured while trying to searching the WMI method: " + ex.ToString());
            }

}

static void Main(string[] args)
        {
            SetStartupType("gupdate", StartupType.Automatic); 
            Console.ReadKey();
        }
    }
}

上面使用了ManagementPath类,或者你也可以这样:


代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Management;

namespace ServicesStartup
{
    class Program
    {
       static void Main(string[] args)
        {
            try
            {
                ManagementObject classInstance = new ManagementObject("root\\CIMV2",
                    "Win32_Service.Name='gupdate'", null);

// Obtain in-parameters for the method.
                ManagementBaseObject inParams = classInstance.GetMethodParameters("ChangeStartMode");
                // Add the input parameters.
                inParams["StartMode"] = "Automatic";

// Execute the method and obtain the return values.
                ManagementBaseObject outParams = classInstance.InvokeMethod("ChangeStartMode", inParams, null);

// List outParams
                Console.WriteLine("Out parameters:");
                Console.WriteLine("ReturnValue: " + outParams["ReturnValue"]);
            }
            catch (ManagementException err)
            {
                Console.WriteLine("An error occured while trying to execute the WMI emthod: " + err.ToString());
            }
            Console.ReadKey();
        }
    }
}

这段代码使用的是ManagementObject类,里面输出的ReturnValue是一个标志,如果值为0就是修改成功了。

这里需要注意的一点:C#必须以管理员的权限运行才能达到效果的,不然service的startmode修改是没有效果的。

(0)

相关推荐

  • 怎么利用c#修改services的Startup type

    我们知道大部分的services的操作可以通过ServiceController来实现,包括services的开启,停止,暂停,还有获取service的status.但是这里关于services的修改Startup type这点,貌似ServiceController不好做到,我们可以这样来做: 复制代码 代码如下: using System;using System.Collections.Generic;using System.Linq;using System.Text;using Sy

  • 详解IOS 利用storyboard修改UITextField的placeholder文字颜色

    详解IOS 利用storyboard修改UITextField的placeholder文字颜色 最近有个需求需要修改UITextField的placeholder文字颜色,在网上找发现有用代码修改的,但是考虑到更加优雅的实现,所以尝试着在storyboard中直接实现,结果竟然真的成功了, 实现的位置如下: 具体步骤: 1.在User Defined Runtime Attributes中添加一个Key. 2.输入Key Path(这里我们输入_placeholderLabel.textColo

  • js动态修改input输入框的type属性(实现方法解析)

    需要实现的效果:一个输入框,当输入框未获得焦点的时候,value 值为 "密码":当输入框失去焦点的时候,输入内容显示为"*****" <input name="password" type="text" id="showPwd" tabindex="2″ class="input" value="密码" /> 我们很直接会想到下面的js $(&

  • 利用python修改json文件的value方法

    做工程时遇到需要监听json文件,根据json文件中的key-value值作出相应处理的情形.为此写了修改json文件的python脚本供工程后续调用. 代码如下: # coding=utf-8 //设置文本格式 import os,sys import json def get_new_json(filepath,key,value): key_ = key.split(".") key_length = len(key_) with open(filepath, 'rb') as

  • 利用C#修改Windows操作系统时间

    C#的System.DateTime类提供了对日期时间的封装,用它进行时间的转换和处理很方便,但是我没有在其中找到任何可以用来修改系统时间的成员.用过VC.VB等的朋友可能知道,我们可以调用Win32 API SetLocalTime来改变系统时间,看来C#中也只能如此了.SetLocalTime需要一个SYSTEMTIME结构指针作为参数,这倒不难,我们可以"比葫芦画瓢"很快在C#中定义这个结构,但问题是,我同时还想"享受".NET Framework的Syste

  • IDEA利用jclasslib 修改class文件的实现

    idea安装jclasslib-bytecode-viewer插件 file–>settings–>plugis ,搜索安装jclasslib-bytecode-viewer,重启idea. 准备好class文件 把要修改的class文件用idea打开. 使用jclasslib view–>show bytecode with jclasslib. 常量池,使用过滤器过滤文本.找到对应的指向数字. 使用下列代码更改内容. package com.yys.screendisplay.con

  • javascript(jquery)利用函数修改全局变量的代码

    我是将当前页用一个全局变量存储.同时在"最后一页"链接里单击方法调用一个函数自动去修改页数为最后一页,然后再调用载入评论的方法. 可是我发现点击"最后一页"第一次的时候系统没反应,再点击一次就抓去最后一页的资料了! 要说全局变量没改,应该是改了,就仿佛改了页数而载入评论的方法失效了一样. 代码如下: 复制代码 代码如下: var page = 1; //初始化页数为第一页 var str = ""; $(document).ready(funct

  • WPF如何利用附加属性修改ShowGridLines效果详解

    前言 附加属性是说一个属性本来不属于某个对象,但由于某种需求而被后来附加上,也就是把对象放入一个特定环境后对象才具有的属性就称为附加属性,附加属性的作用就是将属性与数据类型解耦,让数据类型的设计更加灵活,举例,一个TextBox被放在不同的布局容器中时就会有不同的布局属性,这些属性就是由布局容器为TextBox附加上的,附加属性的本质就是依赖属性,二者仅仅在注册和包装器上有一点区别 小技巧,在VS中输入propa后,连按两次tab键,可以添加好一个附加属性的框架,继续按tab键,可以继续修改附加

  • 一段利用WSH修改和查看IP配置的代码

    复制代码 代码如下: var WMI = GetObject("winmgmts://127.0.0.1");  var sql = "select * from Win32_NetworkAdapterConfiguration where IPEnabled=true";  var enmPing = new Enumerator(WMI.ExecQuery(sql));  var arrAdp = new Array;  while(!enmPing.atEn

  • OpenCvSharp图像的修改和保存以及掩膜操作

    一 :图像的颜色空间转换 在OpenCvSharp中颜色转换函数为:Cv2.CvtColor() 参数: 参数 说明 src: 源图像,8位无符号,16位无符号或单精度浮点 dst: 输出图像,具有与src相同的大小和深度 code: 颜色空间转换代码:(ColorConversionCodes)枚举类型 代码: static void Main(string[] args) { Mat src = new Mat(@"C:\Users\whx\Desktop\opcvImage\s1.jpg

随机推荐