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[];
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Service");
foreach (ManagementObject mo in searcher.Get())
{
lvData[] = mo["Name"].ToString();
lvData[] = mo["DisplayName"].ToString();
lvData[] = mo["StartMode"].ToString();
if (mo["Started"].Equals(true))
lvData[] = "Started";
else
lvData[] = "Stop";
lvData[] = mo["PathName"].ToString();//StartName
lvData[] = mo["StartName"].ToString();//StartName
TexShowing(lvData[] + " ========== " + lvData[] + " ========== " + lvData[] + " ========== " + lvData[] + " ========== " + lvData[] + " ========== " + lvData[]);
}
 public class WMITest : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button Button2;
protected System.Web.UI.WebControls.Button Button3;
protected System.Web.UI.WebControls.Button Button4;
protected System.Web.UI.WebControls.Button Button5;
protected System.Web.UI.WebControls.Button Button6;
protected System.Web.UI.WebControls.Button Button7;
protected System.Web.UI.WebControls.Button Button8;
protected System.Web.UI.WebControls.Button Button9;
protected System.Web.UI.WebControls.Button Button10;
protected System.Web.UI.WebControls.Button Button11;
protected System.Web.UI.WebControls.Button Button12;
protected System.Web.UI.WebControls.Button Button13;
protected System.Web.UI.WebControls.Button Button14;
protected System.Web.UI.WebControls.Button Button15;
protected System.Web.UI.WebControls.Button Button1; private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
} #region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
} /// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Button3.Click += new System.EventHandler(this.Button3_Click);
this.Button4.Click += new System.EventHandler(this.Button4_Click);
this.Button5.Click += new System.EventHandler(this.Button5_Click);
this.Button6.Click += new System.EventHandler(this.Button6_Click);
this.Button7.Click += new System.EventHandler(this.Button7_Click);
this.Button8.Click += new System.EventHandler(this.Button8_Click);
this.Button9.Click += new System.EventHandler(this.Button9_Click);
this.Button10.Click += new System.EventHandler(this.Button10_Click);
this.Button11.Click += new System.EventHandler(this.Button11_Click);
this.Button12.Click += new System.EventHandler(this.Button12_Click);
this.Button13.Click += new System.EventHandler(this.Button13_Click);
this.Button14.Click += new System.EventHandler(this.Button14_Click);
this.Button15.Click += new System.EventHandler(this.Button15_Click);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion #region 1.如何用WMI获得指定磁盘的容量
private string DriveType(string type)
{
string rtntype="";
switch (type)
{
case "":
rtntype="Not Type";
break;
case "":
rtntype="Floppy disk";
break;
case "":
rtntype="Hard disk";
break;
case "":
rtntype="Removable drive or network drive";
break;
case "":
rtntype="CD-ROM";
break;
case "":
rtntype="RAM disk";
break;
default :
break;
}
return rtntype;
} private void Button1_Click(object sender, System.EventArgs e)
{
SelectQuery query=new SelectQuery("Select * From Win32_LogicalDisk");
ManagementObjectSearcher searcher=new ManagementObjectSearcher(query);
foreach(ManagementBaseObject disk in searcher.Get())
{
Response.Write(disk["Name"] +" "+DriveType(disk["DriveType"].ToString()) + " " + disk["VolumeName"]+"<br>");
}
}
#endregion #region 2.如何用WMI获得指定磁盘的容量
private void Button2_Click(object sender, System.EventArgs e)
{
ManagementObject disk = new ManagementObject("win32_logicaldisk.deviceid=\"c:\"");
disk.Get();
Response.Write("Logical Disk Size = " + disk["Size"] + " bytes");
}
#endregion #region 3.如何列出机器中所有的共享资源
private void Button3_Click(object sender, System.EventArgs e)
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_share");
foreach (ManagementObject share in searcher.Get())
{
Response.Write(share.GetText(TextFormat.Mof));
}
}
#endregion #region 4.怎样写程控制让系统中的某个文件夹共享或取消共享
private void Button4_Click(object sender, System.EventArgs e)
{
/*首先,这需要以有相应权限的用户登录系统才行

object[] obj = {"C:\\Temp","我的共享",0,10,"Dot Net 实现的共享",""};
改为
object[] obj = {"C:\\Temp","我的共享",0,null,"Dot Net 实现的共享",""};
就可以实现授权给最多用户了。
*/
ManagementClass _class = new ManagementClass(new ManagementPath("Win32_Share"));
object[] obj = {"C:\\Temp","我的共享",,,"Dot Net 实现的共享",""};
_class.InvokeMethod("create",obj);
}
#endregion #region 5.如何获得系统服务的运行状态
private void Button5_Click(object sender, System.EventArgs e)
{
string[] lvData = new string[];
ManagementObjectSearcher searcher =new ManagementObjectSearcher("SELECT * FROM Win32_Service");
foreach (ManagementObject mo in searcher.Get())
{
lvData[] = mo["Name"].ToString();
lvData[] = mo["StartMode"].ToString();
if (mo["Started"].Equals(true))
lvData[] = "Started";
else
lvData[] = "Stop";
lvData[] = mo["StartName"].ToString();
Response.Write(lvData[]+lvData[]+lvData[]+lvData[]);
}
}
#endregion #region 6.通过WMI修改IP,而实现不用重新启动
private void Button6_Click(object sender, System.EventArgs e)
{
ReportIP();
// SwitchToDHCP();
SwitchToprivate();
Thread.Sleep( );
ReportIP();
Response.Write( "end." );
} private void SwitchToDHCP()
{
ManagementBaseObject inPar = null;
ManagementBaseObject outPar = null;
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach( ManagementObject mo in moc )
{
if( ! (bool) mo["IPEnabled"] )
continue; inPar = mo.GetMethodParameters("EnableDHCP");
outPar = mo.InvokeMethod( "EnableDHCP", inPar, null );
break;
}
} private void SwitchToprivate()
{
ManagementBaseObject inPar = null;
ManagementBaseObject outPar = null;
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach( ManagementObject mo in moc )
{
if( ! (bool) mo[ "IPEnabled" ] )
continue; inPar = mo.GetMethodParameters( "Enableprivate" );
inPar["IPAddress"] = new string[] { "192.168.1.1" };
inPar["SubnetMask"] = new string[] { "255.255.255.0" };
outPar = mo.InvokeMethod( "Enableprivate", inPar, null );
break;
}
} private void ReportIP()
{
Response.Write( "****** Current IP addresses:" );
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach( ManagementObject mo in moc )
{
if( ! (bool) mo[ "IPEnabled" ] )
continue; string str="{0}\n SVC: '{1}' MAC: [{2}]";
str= string.Format(mo["Caption"].ToString(), mo["ServiceName"].ToString(),mo["MACAddress"].ToString()); Response.Write(str); string[] addresses = (string[]) mo[ "IPAddress" ];
string[] subnets = (string[]) mo[ "IPSubnet" ]; Response.Write( " Addresses :" );
foreach(string sad in addresses)
Response.Write(sad+"<br>"); Response.Write( " Subnets :" );
foreach(string sub in subnets )
Response.Write(sub+"<br>");
}
}
#endregion #region 7.如何利用WMI远程重启远程计算机
private void Button7_Click(object sender, System.EventArgs e)
{
Response.Write("Computer details retrieved using Windows Management Instrumentation (WMI)");
Response.Write("mailto:singlepine@hotmail.com");
Response.Write("=========================================================================");
//连接远程计算机
ConnectionOptions co = new ConnectionOptions();
co.Username = "john";
co.Password = "john";
System.Management.ManagementScope ms = new System.Management.ManagementScope("\\\\192.168.1.2\\root\\cimv2", co);
//查询远程计算机
System.Management.ObjectQuery oq = new System.Management.ObjectQuery("SELECT * FROM Win32_OperatingSystem"); ManagementObjectSearcher query1 = new ManagementObjectSearcher(ms,oq);
ManagementObjectCollection queryCollection1 = query1.Get();
foreach( ManagementObject mo in queryCollection1 )
{
string[] ss={""};
mo.InvokeMethod("Reboot",ss);
Response.Write(mo.ToString());
}
}
#endregion #region 8.利用WMI创建一个新的进程
private void Button8_Click(object sender, System.EventArgs e)
{
//Get the object on which the method will be invoked
ManagementClass processClass = new ManagementClass("Win32_Process"); //Get an input parameters object for this method
ManagementBaseObject inParams = processClass.GetMethodParameters("Create"); //Fill in input parameter values
inParams["CommandLine"] = "calc.exe"; //Execute the method
ManagementBaseObject outParams = processClass.InvokeMethod ("Create", inParams, null); //Display results
//Note: The return code of the method is provided in the "returnvalue" property of the outParams object
Response.Write("Creation of calculator process returned: " + outParams["returnvalue"]);
Response.Write("Process ID: " + outParams["processId"]); }
#endregion #region 9.如何通过WMI终止一个进程
private void Button9_Click(object sender, System.EventArgs e)
{
ManagementObject service =
new ManagementObject("win32_service=\"winmgmt\"");
InvokeMethodOptions options = new InvokeMethodOptions();
options.Timeout = new TimeSpan(,,,); ManagementBaseObject outParams = service.InvokeMethod("StopService", null, options); Response.Write("Return Status = " + outParams["Returnvalue"]);
}
#endregion #region 10.如何用WMI 来获取远程机器的目录以及文件
private void Button10_Click(object sender, System.EventArgs e)
{
ManagementObject disk = new ManagementObject( "win32_logicaldisk.deviceid=\"c:\""); disk.Get(); Response.Write("Logical Disk Size = " + disk["Size"] + " bytes");
}
#endregion #region 11.网卡的MAC地址
private void Button11_Click(object sender, System.EventArgs e)
{
ManagementClass mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection moc = mc.GetInstances();
foreach(ManagementObject mo in moc)
{
if((bool)mo["IPEnabled"] == true)
Response.Write("MAC address"+mo["MacAddress"].ToString()+"<br>");
mo.Dispose();
}
}
#endregion #region 12.CPU的系列号
private void Button12_Click(object sender, System.EventArgs e)
{
string cpuInfo = "";//cpu序列号
ManagementClass cimobject = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = cimobject.GetInstances();
foreach(ManagementObject mo in moc)
{
cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
Response.Write(cpuInfo);
}
}
#endregion #region 13.主板的系列号
private void Button13_Click(object sender, System.EventArgs e)
{
ManagementObjectSearcher searcher=new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
foreach(ManagementObject share in searcher.Get())
{
Response.Write("主板制造商:" + share["Manufacturer"].ToString()) ;
Response.Write("型号:" +share["Product"].ToString()) ;
Response.Write("序列号:"+share["SerialNumber"].ToString()) ;
}
}
#endregion #region 14.获取硬盘ID
private void Button14_Click(object sender, System.EventArgs e)
{
String HDid;
ManagementClass cimobject = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection moc = cimobject.GetInstances();
foreach(ManagementObject mo in moc)
{
HDid = (string)mo.Properties["Model"].Value;
Response.Write(HDid);
}
}
#endregion #region 15.获取本机的用户列表
private void Button15_Click(object sender, System.EventArgs e)
{
SelectQuery query = new SelectQuery("SELECT * FROM Win32_UserAccount");
ManagementObjectSearcher searcher = new ManagementObjectSearcher(query);
foreach(ManagementObject os in searcher.Get())
{
Response.Write(os["Name"]);
}
}
#endregion
}

C# 查询Windows Service 信息 ,所在目录 启动状态的更多相关文章

  1. .Net C# Windows Service于server无法启动,错误 193:0xc1

    1.情况说明:的近期发展windows维修,当地win7系统正常.把server安装会失败. 图中的引导失败的例子.: 解决方法:执行->输入:eventvwr.msc    打开你的事件查看器 ...

  2. C#中级-Windows Service程序安装注意事项

    一.前言 这周除了改写一些识别算法外,继续我的Socket服务编写.服务器端的Socket服务是以Windows Service的形式运行的. 在我完成Windows Service编写后,启动服务时 ...

  3. Windows Service 学习系列(二):C# windows服务:安装、卸载、启动和停止Windows Service几种方式

    一.通过InstallUtil.exe安装.卸载.启动.停止Windows Service 方法一 1.以管理员身份运行cmd 2.安装windows服务 切换cd C:\Windows\Micros ...

  4. C#Windows Service服务程序的安装/卸载、启动/停止 桌面客户端管理程序设计

    C#Windows Service服务程序的安装/卸载.启动/停止 桌面客户端管理程序设计 关于Windows Service程序的安装与卸载如果每次使用命令行操作,那简直要奔溃了,太麻烦而且还容易出 ...

  5. war包部署在tomcat下,使用windows service服务方式启动tomcat服务器,在包含调用dll的模块,报dll找不到问题的解决办法

    问题描述: 开发了一个需要调用dll的java web程序,在idea开发环境下运行调试没问题,可以正常运行,在tomcat/bin下,运行批处理startup.bat,启动tomcat服务器,也可以 ...

  6. Windows批处理以服务的方式启动解决思路(ShadowsockR注册成Windows Service)

    我以ShadowsockR的server启动来解释: 由于这东西是python,如果要启动,可以写一个批处理(python.exe server.py)来启动,但是我观察发现启动的时候是附带pytho ...

  7. Windows服务器Pyton辅助运维--01.自动Copy文件(文件夹)到远程服务器所在目录

    Windows服务器Pyton辅助运维 01.自动Copy文件(文件夹)到远程服务器所在目录 开发环境: u  Web服务器: Windows Server 2008 R2 SP1 IIS 7.5 u ...

  8. windows Service启动带有管理员权限的GUI进程

    事情是这样的,公司的产品有个守护进程(windows Service)需要启动产品的主程序exe,让主程序它运行为管理员权限(因为主程序会加载一个插件,插件中有列出端口监听的功能,需要由端口查找到进程 ...

  9. 如何在HPUX的终端提示符前显示当前登录用户信息和所在目录

    修改/etc/default/profile文件,在最后加上如下内容: case $LOGNAME in     'root')     PS1="$LOGNAME@$(hostname): ...

随机推荐

  1. sopcinfo路径改变,nios工程该怎么办?

    操作系统:Win7 64 bit 开发环境:Quartus II 14.0 (64-Bit)  + Nios II EDS 14.0 使用Quartus 时,有时候出于备份的考虑,或者从网上下载别人的 ...

  2. android Json 解析和生成

    什么是json: JSON即JavaScript Object Natation的简称,它是一种轻量级的数据交换格式,非常适合服务器与JavaScript的交互.JSON易于人阅读和编写.同时也易于机 ...

  3. 关于mina框架EMFILE: open too many files exception的处理

    做项目的时候,用到了mina框架,与server进行交互.由于采用的是短连接+心跳包+断线重连的方式,因此网络不稳定的时候经常会出现断线重连. 那么有时候偶尔会出现EMFILE: open too m ...

  4. yii中rights安装

    具体安装程序可参考:http://www.focalhot.com/blog/5.html 我在安装过程中一直存在问题,提示表auth_assignment不存在 由于我是将项目中已有的代码复制过来, ...

  5. 洛谷P1215 [USACO1.4]母亲的牛奶 Mother's Milk

    P1215 [USACO1.4]母亲的牛奶 Mother's Milk 217通过 348提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 暂时没有讨论 ...

  6. WinDBG使用之线程

    ~* 查看所有线程 ~ 0 k 查看0号线程栈回溯

  7. JavaScript实现样式表的简单切换

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  8. struts2项目需要加入的jar包

    asm-3.3.jarasm-commons-3.3.jarasm-tree-3.3.jarcommons-fileupload-1.2.2.jarcommons-io-2.0.1.jarcommon ...

  9. Android fragment 想activity 传送数据

    fragment可以通过定义 fragment的接口的方法来 想activity传送数据: 而activity则是通过实现 fragment的接口来接收fragment的送来的数据: 1.在fragm ...

  10. WeChat 6.3 wipe deleted chat messages as well as LINE 5.3 and above

    Let me show you the WeChat version first. It is 6.3. What will happen to WeChat deleted chat message ...