zoukankan      html  css  js  c++  java
  • C# 查询Windows Service 信息 ,所在目录 启动状态

    1.WMI简介
    WMI是英文Windows Management Instrumentation的简写,它的功能主要是:访问本地主机的一些信息和服务,可以管理远程计算机(当然你必须要拥有足够的权限),比如:重启,关机,关闭进程,创建进程等。
    2.使用时首先添加System.Management.dll,然后引用

    using System.Management;
    using System.Threading; 

     在EXE的应用程序中我们可以用Application.ExeName来获取应用程序自身的文件名,那么在Windows服务中怎么获取Windows服务程序的路径?

    用GetModuleFileName可以获取Windows服务程序的路径。

    用WMI和轻松获取SERVICE的全面信息(包括路径)  
      单获取路径语句如下:  
      select   PathName   From   Win32_Service   Where   DisplayName   =   'YourService’

                    string[] lvData = new string[6];
                    ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Service");
                    foreach (ManagementObject mo in searcher.Get())
                    {
                        lvData[0] = mo["Name"].ToString();
                        lvData[1] = mo["DisplayName"].ToString();
                        lvData[2] = mo["StartMode"].ToString();
                        if (mo["Started"].Equals(true))
                            lvData[3] = "Started";
                        else
                            lvData[3] = "Stop";
                        lvData[4] = mo["PathName"].ToString();//StartName
                        lvData[5] = mo["StartName"].ToString();//StartName
                        TexShowing(lvData[0] + " ========== " + lvData[1] + " ========== " + lvData[2] + " ========== " + lvData[3] + " ========== " + lvData[4] + " ========== " + lvData[5]);
                    }
      1 public class WMITest : System.Web.UI.Page
      2     {
      3         protected System.Web.UI.WebControls.Button Button2;
      4         protected System.Web.UI.WebControls.Button Button3;
      5         protected System.Web.UI.WebControls.Button Button4;
      6         protected System.Web.UI.WebControls.Button Button5;
      7         protected System.Web.UI.WebControls.Button Button6;
      8         protected System.Web.UI.WebControls.Button Button7;
      9         protected System.Web.UI.WebControls.Button Button8;
     10         protected System.Web.UI.WebControls.Button Button9;
     11         protected System.Web.UI.WebControls.Button Button10;
     12         protected System.Web.UI.WebControls.Button Button11;
     13         protected System.Web.UI.WebControls.Button Button12;
     14         protected System.Web.UI.WebControls.Button Button13;
     15         protected System.Web.UI.WebControls.Button Button14;
     16         protected System.Web.UI.WebControls.Button Button15;
     17         protected System.Web.UI.WebControls.Button Button1;
     18     
     19         private void Page_Load(object sender, System.EventArgs e)
     20         {
     21             // Put user code to initialize the page here
     22         }
     23 
     24         #region Web Form Designer generated code
     25         override protected void OnInit(EventArgs e)
     26         {
     27             //
     28             // CODEGEN: This call is required by the ASP.NET Web Form Designer.
     29             //
     30             InitializeComponent();
     31             base.OnInit(e);
     32         }
     33         
     34         /// <summary>
     35         /// Required method for Designer support - do not modify
     36         /// the contents of this method with the code editor.
     37         /// </summary>
     38         private void InitializeComponent()
     39         {    
     40             this.Button1.Click += new System.EventHandler(this.Button1_Click);
     41             this.Button2.Click += new System.EventHandler(this.Button2_Click);
     42             this.Button3.Click += new System.EventHandler(this.Button3_Click);
     43             this.Button4.Click += new System.EventHandler(this.Button4_Click);
     44             this.Button5.Click += new System.EventHandler(this.Button5_Click);
     45             this.Button6.Click += new System.EventHandler(this.Button6_Click);
     46             this.Button7.Click += new System.EventHandler(this.Button7_Click);
     47             this.Button8.Click += new System.EventHandler(this.Button8_Click);
     48             this.Button9.Click += new System.EventHandler(this.Button9_Click);
     49             this.Button10.Click += new System.EventHandler(this.Button10_Click);
     50             this.Button11.Click += new System.EventHandler(this.Button11_Click);
     51             this.Button12.Click += new System.EventHandler(this.Button12_Click);
     52             this.Button13.Click += new System.EventHandler(this.Button13_Click);
     53             this.Button14.Click += new System.EventHandler(this.Button14_Click);
     54             this.Button15.Click += new System.EventHandler(this.Button15_Click);
     55             this.Load += new System.EventHandler(this.Page_Load);
     56 
     57         }
     58         #endregion
     59 
     60         #region 1.如何用WMI获得指定磁盘的容量
     61         private string DriveType(string type)
     62         {
     63             string rtntype="";
     64             switch (type)
     65             {
     66                 case "1":
     67                     rtntype="Not Type";
     68                     break;
     69                 case "2":
     70                     rtntype="Floppy disk";
     71                     break;
     72                 case "3":
     73                     rtntype="Hard disk";
     74                     break;
     75                 case "4":
     76                     rtntype="Removable drive or network drive";
     77                     break;
     78                 case "5":
     79                     rtntype="CD-ROM";
     80                     break;
     81                 case "6":
     82                     rtntype="RAM disk";
     83                     break;
     84                 default :
     85                     break;
     86             }
     87             return rtntype;
     88         }
     89 
     90         private void Button1_Click(object sender, System.EventArgs e)
     91         {
     92             SelectQuery query=new SelectQuery("Select * From Win32_LogicalDisk"); 
     93             ManagementObjectSearcher searcher=new ManagementObjectSearcher(query); 
     94             foreach(ManagementBaseObject disk in searcher.Get()) 
     95             { 
     96                 Response.Write(disk["Name"] +" "+DriveType(disk["DriveType"].ToString()) + " " + disk["VolumeName"]+"<br>"); 
     97             }
     98         }
     99         #endregion
    100 
    101         #region 2.如何用WMI获得指定磁盘的容量
    102         private void Button2_Click(object sender, System.EventArgs e)
    103         {
    104             ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid="c:""); 
    105             disk.Get(); 
    106             Response.Write("Logical Disk Size = " + disk["Size"] + " bytes");             
    107         }
    108         #endregion
    109 
    110         #region 3.如何列出机器中所有的共享资源
    111         private void Button3_Click(object sender, System.EventArgs e)
    112         {
    113             ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_share"); 
    114             foreach (ManagementObject share in searcher.Get()) 
    115             { 
    116                 Response.Write(share.GetText(TextFormat.Mof)); 
    117             } 
    118         }
    119         #endregion
    120 
    121         #region 4.怎样写程控制让系统中的某个文件夹共享或取消共享
    122         private void Button4_Click(object sender, System.EventArgs e)
    123         {
    124             /*首先,这需要以有相应权限的用户登录系统才行
    125 126             object[] obj = {"C:\Temp","我的共享",0,10,"Dot Net 实现的共享",""}; 
    127             改为 
    128             object[] obj = {"C:\Temp","我的共享",0,null,"Dot Net 实现的共享",""}; 
    129             就可以实现授权给最多用户了。
    130             */
    131             ManagementClass _class = new ManagementClass(new ManagementPath("Win32_Share"));
    132             object[] obj = {"C:\Temp","我的共享",0,10,"Dot Net 实现的共享",""};
    133             _class.InvokeMethod("create",obj); 
    134         }
    135         #endregion
    136 
    137         #region 5.如何获得系统服务的运行状态
    138         private void Button5_Click(object sender, System.EventArgs e)
    139         {
    140             string[] lvData =  new string[4];            
    141             ManagementObjectSearcher searcher =new ManagementObjectSearcher("SELECT * FROM Win32_Service"); 
    142             foreach (ManagementObject mo in searcher.Get()) 
    143             { 
    144                 lvData[0] = mo["Name"].ToString(); 
    145                 lvData[1] = mo["StartMode"].ToString(); 
    146                 if (mo["Started"].Equals(true)) 
    147                     lvData[2] = "Started"; 
    148                 else 
    149                     lvData[2] = "Stop"; 
    150                 lvData[3] = mo["StartName"].ToString(); 
    151                 Response.Write(lvData[0]+lvData[1]+lvData[2]+lvData[3]);                    
    152             }             
    153         }
    154         #endregion
    155 
    156         #region 6.通过WMI修改IP,而实现不用重新启动
    157         private void Button6_Click(object sender, System.EventArgs e)
    158         {
    159             ReportIP(); 
    160             // SwitchToDHCP(); 
    161             SwitchToprivate(); 
    162             Thread.Sleep( 5000 ); 
    163             ReportIP(); 
    164             Response.Write( "end." );
    165         }        
    166         
    167         private void SwitchToDHCP() 
    168         { 
    169             ManagementBaseObject inPar = null; 
    170             ManagementBaseObject outPar = null; 
    171             ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); 
    172             ManagementObjectCollection moc = mc.GetInstances(); 
    173             foreach( ManagementObject mo in moc ) 
    174             { 
    175                 if( ! (bool) mo["IPEnabled"] ) 
    176                     continue; 
    177 
    178                 inPar = mo.GetMethodParameters("EnableDHCP"); 
    179                 outPar = mo.InvokeMethod( "EnableDHCP", inPar, null ); 
    180                 break; 
    181             } 
    182         } 
    183 
    184         private void SwitchToprivate() 
    185         { 
    186             ManagementBaseObject inPar = null; 
    187             ManagementBaseObject outPar = null; 
    188             ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); 
    189             ManagementObjectCollection moc = mc.GetInstances(); 
    190             foreach( ManagementObject mo in moc ) 
    191             { 
    192                 if( ! (bool) mo[ "IPEnabled" ] ) 
    193                     continue; 
    194 
    195                 inPar = mo.GetMethodParameters( "Enableprivate" ); 
    196                 inPar["IPAddress"] = new string[] { "192.168.1.1" }; 
    197                 inPar["SubnetMask"] = new string[] { "255.255.255.0" }; 
    198                 outPar = mo.InvokeMethod( "Enableprivate", inPar, null ); 
    199                 break; 
    200             } 
    201         } 
    202 
    203         private void ReportIP() 
    204         { 
    205             Response.Write( "****** Current IP addresses:" ); 
    206             ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); 
    207             ManagementObjectCollection moc = mc.GetInstances(); 
    208             foreach( ManagementObject mo in moc ) 
    209             { 
    210                 if( ! (bool) mo[ "IPEnabled" ] ) 
    211                     continue; 
    212 
    213                 string str="{0}
     SVC: '{1}' MAC: [{2}]";
    214                 str= string.Format(mo["Caption"].ToString(), mo["ServiceName"].ToString(),mo["MACAddress"].ToString());
    215 
    216                 Response.Write(str); 
    217 
    218                 string[] addresses = (string[]) mo[ "IPAddress" ]; 
    219                 string[] subnets = (string[]) mo[ "IPSubnet" ]; 
    220 
    221                 Response.Write( " Addresses :" ); 
    222                 foreach(string sad in addresses) 
    223                     Response.Write(sad+"<br>"); 
    224 
    225                 Response.Write( " Subnets :" ); 
    226                 foreach(string sub in subnets ) 
    227                     Response.Write(sub+"<br>"); 
    228             } 
    229         }
    230         #endregion
    231 
    232         #region 7.如何利用WMI远程重启远程计算机
    233         private void Button7_Click(object sender, System.EventArgs e)
    234         {
    235             Response.Write("Computer details retrieved using Windows Management Instrumentation (WMI)"); 
    236             Response.Write("mailto:singlepine@hotmail.com"); 
    237             Response.Write("=========================================================================");  
    238             //连接远程计算机 
    239             ConnectionOptions co = new ConnectionOptions(); 
    240             co.Username = "john"; 
    241             co.Password = "john"; 
    242             System.Management.ManagementScope ms = new System.Management.ManagementScope("\\192.168.1.2\root\cimv2", co);       
    243             //查询远程计算机 
    244             System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_OperatingSystem"); 
    245                    
    246             ManagementObjectSearcher query1 = new ManagementObjectSearcher(ms,oq); 
    247             ManagementObjectCollection queryCollection1 = query1.Get();             
    248             foreach( ManagementObject mo in queryCollection1 )  
    249             { 
    250                 string[] ss={""}; 
    251                 mo.InvokeMethod("Reboot",ss); 
    252                 Response.Write(mo.ToString()); 
    253             } 
    254         }
    255         #endregion
    256 
    257         #region 8.利用WMI创建一个新的进程
    258         private void Button8_Click(object sender, System.EventArgs e)
    259         {
    260             //Get the object on which the method will be invoked 
    261             ManagementClass processClass = new ManagementClass("Win32_Process"); 
    262 
    263             //Get an input parameters object for this method 
    264             ManagementBaseObject inParams = processClass.GetMethodParameters("Create"); 
    265 
    266             //Fill in input parameter values 
    267             inParams["CommandLine"] = "calc.exe"; 
    268 
    269             //Execute the method 
    270             ManagementBaseObject outParams = processClass.InvokeMethod ("Create", inParams, null); 
    271 
    272             //Display results 
    273             //Note: The return code of the method is provided in the "returnvalue" property of the outParams object 
    274             Response.Write("Creation of calculator process returned: " + outParams["returnvalue"]); 
    275             Response.Write("Process ID: " + outParams["processId"]); 
    276 
    277         }
    278         #endregion
    279 
    280         #region 9.如何通过WMI终止一个进程
    281         private void Button9_Click(object sender, System.EventArgs e)
    282         {
    283             ManagementObject service =  
    284                 new ManagementObject("win32_service="winmgmt""); 
    285             InvokeMethodOptions options = new InvokeMethodOptions(); 
    286             options.Timeout = new TimeSpan(0,0,0,5);  
    287 
    288             ManagementBaseObject outParams = service.InvokeMethod("StopService", null, options);
    289 
    290             Response.Write("Return Status = " + outParams["Returnvalue"]);
    291         }
    292         #endregion
    293 
    294         #region 10.如何用WMI 来获取远程机器的目录以及文件
    295         private void Button10_Click(object sender, System.EventArgs e)
    296         {
    297             ManagementObject disk = new ManagementObject(
    298 
    299                 "win32_logicaldisk.deviceid="c:"");
    300 
    301             disk.Get();
    302 
    303             Response.Write("Logical Disk Size = " + disk["Size"] + " bytes");
    304         }
    305         #endregion
    306 
    307         #region 11.网卡的MAC地址
    308         private void Button11_Click(object sender, System.EventArgs e)
    309         {
    310             ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration"); 
    311             ManagementObjectCollection moc = mc.GetInstances(); 
    312             foreach(ManagementObject mo in moc) 
    313             { 
    314                 if((bool)mo["IPEnabled"] == true) 
    315                     Response.Write("MAC address"+mo["MacAddress"].ToString()+"<br>"); 
    316                 mo.Dispose(); 
    317             } 
    318         }
    319         #endregion
    320 
    321         #region 12.CPU的系列号 
    322         private void Button12_Click(object sender, System.EventArgs e)
    323         {
    324             string cpuInfo = "";//cpu序列号 
    325             ManagementClass cimobject = new ManagementClass("Win32_Processor"); 
    326             ManagementObjectCollection moc = cimobject.GetInstances(); 
    327             foreach(ManagementObject mo in moc) 
    328             { 
    329                 cpuInfo = mo.Properties["ProcessorId"].Value.ToString(); 
    330                 Response.Write(cpuInfo);
    331             } 
    332         }
    333         #endregion
    334 
    335         #region 13.主板的系列号
    336         private void Button13_Click(object sender, System.EventArgs e)
    337         {
    338             ManagementObjectSearcher searcher=new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
    339             foreach(ManagementObject share in searcher.Get())
    340             {
    341                 Response.Write("主板制造商:" + share["Manufacturer"].ToString()) ;
    342                 Response.Write("型号:" +share["Product"].ToString()) ;
    343                 Response.Write("序列号:"+share["SerialNumber"].ToString()) ;
    344             }
    345         }
    346         #endregion
    347 
    348         #region 14.获取硬盘ID
    349         private void Button14_Click(object sender, System.EventArgs e)
    350         {
    351             String HDid; 
    352             ManagementClass cimobject = new ManagementClass("Win32_DiskDrive"); 
    353             ManagementObjectCollection moc = cimobject.GetInstances(); 
    354             foreach(ManagementObject mo in moc) 
    355             { 
    356                 HDid = (string)mo.Properties["Model"].Value; 
    357                 Response.Write(HDid);  
    358             } 
    359         }
    360         #endregion
    361 
    362         #region 15.获取本机的用户列表
    363         private void Button15_Click(object sender, System.EventArgs e)
    364         {
    365             SelectQuery query = new SelectQuery("SELECT * FROM Win32_UserAccount");
    366             ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
    367             foreach(ManagementObject os in searcher.Get())
    368             {
    369                 Response.Write(os["Name"]);
    370             }
    371         }
    372         #endregion
    373     }
    View Code
  • 相关阅读:
    SpringMvc与Struts2的对比
    Spring 通知
    Spring 之 AOP
    Spring 之 IOC
    Spring IOC 和 AOP概述
    JSON与JAVA数据的相互转换
    (4)-optXXX方法的使用
    (3)-JSONObject的过滤设置
    (2)-生成JSONObject的方法
    String 类型的相关转换
  • 原文地址:https://www.cnblogs.com/qq458978/p/4519906.html
Copyright © 2011-2022 走看看