几个方法: 1.注册表中写到以下其中之一的一个键: HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\userinit 或 HKLM\Software\Microsogt\Windows NT\CurrentVersion\Winlogon\Shell 或 HKLM\Software\Microsogt\Windows\CurrentVersion\Run 或 HKLM\Software\Microsogt\Windows\CurrentVersion\RunOnce 或 HKLM\Software\Microsogt\Windows\CurrentVersion\RunOnceEx 或 HKLM\Software\Microsogt\Windows\CurrentVersion\Runservices 或 HKLM\Software\Microsogt\Windows\CurrentVersion\RunservicesOnce2.看MSDN “For example, the Win32_OperatingSystem class Shutdown method requires you to set the SeShutdownPrivilege privilege. For more information, see Executing Privileged Operations.Call the method and examine the return value to determine if the method was successful. The following example uses the Shutdown method to shut down a computer.Set OpSysSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}" & _ "//./root/cimv2").ExecQuery("SELECT * FROM " & _ "Win32_OperatingSystem WHERE Primary = true")ianswer = MsgBox("Shut Down Windows? -Warning- Save data first!", _ vbQuestion + vbOKCancel, _ "Shut Down")If ianswer = vbOK Then 'If OK, shut down For Each OpSys In OpSysSet outParam = OpSys.Shutdown If err.number <> 0 Then WScript.echo "Error number: " & Err.Number & _ vbNewLine & _ "Description: " & Err.Description End If Next Else ' user selected cancel WScript.echo "Operation canceled"End If”
1.注册表中写到以下其中之一的一个键:
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\userinit 或
HKLM\Software\Microsogt\Windows NT\CurrentVersion\Winlogon\Shell 或
HKLM\Software\Microsogt\Windows\CurrentVersion\Run 或
HKLM\Software\Microsogt\Windows\CurrentVersion\RunOnce 或
HKLM\Software\Microsogt\Windows\CurrentVersion\RunOnceEx 或
HKLM\Software\Microsogt\Windows\CurrentVersion\Runservices 或
HKLM\Software\Microsogt\Windows\CurrentVersion\RunservicesOnce2.看MSDN
“For example, the Win32_OperatingSystem class Shutdown method requires you to set the SeShutdownPrivilege privilege. For more information, see Executing Privileged Operations.Call the method and examine the return value to determine if the method was successful.
The following example uses the Shutdown method to shut down a computer.Set OpSysSet = GetObject("winmgmts:{impersonationLevel=impersonate,(Shutdown)}" & _
"//./root/cimv2").ExecQuery("SELECT * FROM " & _
"Win32_OperatingSystem WHERE Primary = true")ianswer = MsgBox("Shut Down Windows? -Warning- Save data first!", _
vbQuestion + vbOKCancel, _
"Shut Down")If ianswer = vbOK Then 'If OK, shut down For Each OpSys In OpSysSet
outParam = OpSys.Shutdown If err.number <> 0 Then
WScript.echo "Error number: " & Err.Number & _
vbNewLine & _
"Description: " & Err.Description
End If Next Else ' user selected cancel
WScript.echo "Operation canceled"End If”
如果是UNIX或者LINUX的OS,得写到XCONFIG配置文件中.如果是WINDOWS的OS,有三种方法:
1.把程序加入开始菜单的启动组
2.写进注册表的Run键
3.做成Windows服务
个人觉得2/3方法都挺好的.
Q2:
关机程序可以调用CMD然后利用其中的SHUTDOWN命令来实现.
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
using System.Management;namespace RestComputer
{
/// <summary>
/// Form1 的摘要说明。
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox ip;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.Label label2;
private System.Windows.Forms.TextBox pwd;
private System.Windows.Forms.Button button2;
/// <summary>
/// 必需的设计器变量。
/// </summary>
private System.ComponentModel.Container components = null; public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent(); //
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
} /// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
} #region Windows Form Designer generated code
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.ip = new System.Windows.Forms.TextBox();
this.pwd = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.label2 = new System.Windows.Forms.Label();
this.button2 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// ip
//
this.ip.Location = new System.Drawing.Point(96, 8);
this.ip.Multiline = true;
this.ip.Name = "ip";
this.ip.Size = new System.Drawing.Size(160, 32);
this.ip.TabIndex = 0;
this.ip.Text = "";
//
// pwd
//
this.pwd.Location = new System.Drawing.Point(96, 56);
this.pwd.Multiline = true;
this.pwd.Name = "pwd";
this.pwd.Size = new System.Drawing.Size(160, 32);
this.pwd.TabIndex = 1;
this.pwd.Text = "";
//
// button1
//
this.button1.Location = new System.Drawing.Point(8, 104);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(100, 32);
this.button1.TabIndex = 2;
this.button1.Text = "重起";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// label1
//
this.label1.Location = new System.Drawing.Point(8, 16);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(88, 24);
this.label1.TabIndex = 3;
this.label1.Text = "输入IP地址:";
//
// label2
//
this.label2.Location = new System.Drawing.Point(8, 56);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(72, 23);
this.label2.TabIndex = 4;
this.label2.Text = "输入密码:";
//
// button2
//
this.button2.Location = new System.Drawing.Point(152, 104);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(100, 32);
this.button2.TabIndex = 5;
this.button2.Text = "关机";
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(272, 149);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.button2,
this.label2,
this.label1,
this.button1,
this.pwd,
this.ip});
this.Cursor = System.Windows.Forms.Cursors.Hand;
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.HelpButton = true;
this.MaximizeBox = false;
this.Name = "Form1";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "RestartComputer";
this.ResumeLayout(false); }
#endregion /// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
} private void button1_Click(object sender, System.EventArgs e)
{
try
{
ConnectionOptions Co=new ConnectionOptions();
Co.Username = "Administrator";
Co.Password = pwd.Text; System.Management.ManagementScope ms= new System.Management.ManagementScope("\\\\"+ip.Text+"\\root\\cimv2",Co);
System.Management.ObjectQuery oq = new System.Management.ObjectQuery("select * from Win32_OperatingSystem");
ManagementObjectSearcher q=new ManagementObjectSearcher(ms,oq);
ManagementObjectCollection p= q.Get();
foreach(ManagementObject mo in p)
{
ip.Text = "正在重起................";
string[] ss = {""};
mo.InvokeMethod("Reboot",ss);
//mo.InvokeMethod("ShutDown",ss);
Console.WriteLine(mo.ToString());
}
ip.Text = "重起完成........................";
}
catch(System.Exception Err)
{
ip.Text = "密码不对";
}
} private void button2_Click(object sender, System.EventArgs e)
{
try
{
ConnectionOptions Co=new ConnectionOptions();
Co.Username = "Administrator";
Co.Password = pwd.Text; System.Management.ManagementScope ms= new System.Management.ManagementScope("\\\\"+ip.Text+"\\root\\cimv2",Co);
System.Management.ObjectQuery oq = new System.Management.ObjectQuery("select * from Win32_OperatingSystem");
ManagementObjectSearcher q=new ManagementObjectSearcher(ms,oq);
ManagementObjectCollection p= q.Get();
foreach(ManagementObject mo in p)
{
ip.Text = "正在关机................";
string[] ss = {""};
//mo.InvokeMethod("Reboot",ss);
mo.InvokeMethod("ShutDown",ss);
Console.WriteLine(mo.ToString());
}
ip.Text = "关机完成................";
}
catch(System.Exception Err)
{
ip.Text = Err.Message;
}
}
}
}
如果成功可以在运行中使用msconfig查看。
using Microsoft.Win32;在程序运行的时候string strKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Run";
string strFilePath = Application.ExecutablePath ;
RegistryKey regKey = Registry.LocalMachine.OpenSubKey(strKey , true);
if(regKey != null)
{
regKey.SetValue("cti",strFilePath);
}今后就自动运行了
"System.Management.dll"动态库即可;