📄 srvices.cs
字号:
if (rbClicked.Text == "&Current Machine")
booleanFlag = false;
//toggle controls
labelIP.Visible = booleanFlag;
textIP.Visible = booleanFlag;
labelUserID.Visible = booleanFlag;
textUserID.Visible = booleanFlag;
labelPassword.Visible = booleanFlag;
textPassword.Visible = booleanFlag;
}
/// <summary>
/// buttonRefresh click event allow user to refresh service list view
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void buttonRefresh_Click(object sender, System.EventArgs e)
{
//call refresh function
this.Refresh();
}
/// <summary>
/// List view mouse down event to built context menu dynamically
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void listViewServices_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
System.Windows.Forms.ListView listViewObject = (System.Windows.Forms.ListView) sender;
ContextMenu mnuContextMenu = new ContextMenu();
MenuItem menuItem = new MenuItem();
ManagementObjectCollection queryCollection;
//check if right button
if (e.Button == System.Windows.Forms.MouseButtons.Right)
{
//get service name
ServiceName = listViewObject.GetItemAt(e.X, e.Y).Text;
//set list view item
ServiceItem = listViewObject.GetItemAt(e.X,e.Y);
//create popup menu
listViewObject.ContextMenu = mnuContextMenu;
try
{
//get specific service object
queryCollection = getServiceCollection("SELECT * FROM Win32_Service Where Name = '" + ServiceName + "'");
foreach ( ManagementObject mo in queryCollection)
{
//create menu depending on service state
if (mo["Started"].Equals(true))
{
menuItem.Text = "Stop";
//set action property
ServiceAction = "StopService";
}
else
{
menuItem.Text = "Start";
ServiceAction = "StartService";
}
mnuContextMenu.MenuItems.Add(menuItem);
// Add functionality to the menu items using the Click event.
menuItem.Click += new System.EventHandler(this.menuItem_Click);
}
}
catch (Exception e1)
{
MessageBox.Show("Error: " + e1);
}
}
}
/// <summary>
/// List view context menu click event to invoke start/stop service
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void menuItem_Click(object sender, System.EventArgs e)
{
ManagementObjectCollection queryCollection;
ListViewItem lvItem;
//Set up a handler for the asynchronous callback
ManagementOperationObserver observer = new ManagementOperationObserver();
completionHandler.MyHandler completionHandlerObj = new completionHandler.MyHandler();
observer.ObjectReady += new ObjectReadyEventHandler(completionHandlerObj.Done);
//get specific service object
queryCollection = getServiceCollection("Select * from Win32_Service Where Name = '" + ServiceName + "'");
//Status
updateStatus("Starting/Stopping service...");
foreach ( ManagementObject mo in queryCollection)
{
//start or stop service
mo.InvokeMethod(observer, ServiceAction, null);
}
//wait until invoke method is complete or 5 sec timeout
int intCount = 0;
while (!completionHandlerObj.IsComplete)
{
if (intCount > 10)
{
MessageBox.Show("Terminate process timed out.", "Terminate Process Status");
break;
}
//wait 1/2 sec.
System.Threading.Thread.Sleep(500);
//increment counter
intCount++;
}
//see if call was successful.
if (completionHandlerObj.ReturnObject.Properties["returnValue"].Value.ToString() == "0")
{
//succeeded
lvItem = ServiceItem;
if (ServiceAction == "StartService")
lvItem.SubItems[2].Text = "Started";
else
lvItem.SubItems[2].Text = "Stop";
}
else
{
//error message
string stringAction;
if (ServiceAction == "StartService")
stringAction = "start";
else
stringAction = "stop";
MessageBox.Show("Failed to " + stringAction + " service " + ServiceName + ".", "Start/Stop Service Failure");
}
//clean-up objects
ServiceName = "";
ServiceAction = "";
ServiceItem = null;
//Status
updateStatus("Ready");
this.Update();
}
/// <summary>
/// Get computer service collection
/// </summary>
/// <param name="stringQuery"></param>
/// <returns>queryCollection</returns>
private ManagementObjectCollection getServiceCollection(string stringQuery)
{
ManagementObjectSearcher query;
ManagementObjectCollection queryCollection = null;
System.Management.ObjectQuery oq;
string stringMachineName = "";
//Connect to the remote computer
ConnectionOptions co = new ConnectionOptions();
if (radioMachine.Checked == true)
{
stringMachineName = "localhost";
}
else
{
stringMachineName = textIP.Text;
}
if (stringMachineName.Trim().Length == 0)
{
MessageBox.Show("Must enter machine IP address or name.");
return null;
}
//get user and password
if (textUserID.Text.Trim().Length > 0)
{
co.Username = textUserID.Text;
co.Password = textPassword.Text;
}
//Point to machine
System.Management.ManagementScope ms = new System.Management.ManagementScope("\\\\" + stringMachineName + "\\root\\cimv2", co);
//Status
updateStatus("Getting Services Information");
//Query remote computer across the connection
oq = new System.Management.ObjectQuery(stringQuery);
query = new ManagementObjectSearcher(ms,oq);
try
{
queryCollection = query.Get();
}
catch (Exception e1)
{
MessageBox.Show("Error: " + e1);
}
//Status
updateStatus("Ready");
this.Update();
return queryCollection;
}
/// <summary>
/// Get/Set service name
/// </summary>
/// <returns>stringServiceName</returns>
private string ServiceName
{
get
{
return stringServiceName;
}
set
{
stringServiceName = value;
}
}
/// <summary>
/// Get/Set invoke service action
/// </summary>
/// <returns>stringServiceAction</returns>
private string ServiceAction
{
get
{
return stringServiceAction;
}
set
{
stringServiceAction = value;
}
}
/// <summary>
/// Get/Set list view item object
/// </summary>
/// <returns>listViewServiceItem</returns>
private ListViewItem ServiceItem
{
get
{
return listViewServiceItem;
}
set
{
listViewServiceItem = value;
}
}
/// <summary>
/// Public Refresh method
/// </summary>
public override void Refresh()
{
// Init list view
InitListView();
getServices();
boolLoaded = true;
}
/// <summary>
/// GetLoaded check if control was loaded before
/// </summary>
/// <returns></returns>
public bool Loaded
{
get
{
//true if control already loaded else false.
return boolLoaded;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -