【求教】C#如何实现强制结束这个进程,系统就自动重启或关机 像网吧里的那种还原软件的进程,你强制退出了系统就自动重启或关机。求教C#是否可以实现这个功能可以实现的话那该如何写才对。最近对这个比较感兴趣先谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你自己杀掉svchost.exe进程他就强制重启了..... 要是想走正常渠道的话要调用user32.DLL的API[DllImport("user32.dll")]static extern bool ExitWindowsEx(ExitWindows uFlags, ShutdownReason dwReason);[STAThread]static void Main(string[] args){ExitWindowsEx(ExitWindows.LogOff, ShutdownReason.MajorOther & ShutdownReason.MinorOther);}public enum ExitWindows : uint{LogOff = 0x00, //注销 ShutDown = 0x01, //关机 Reboot = 0x02, //重启 Force = 0x04,PowerOff = 0x08,ForceIfHung = 0x10}public enum ShutdownReason : uint{MajorApplication = 0x00040000,MajorHardware = 0x00010000,MajorLegacyApi = 0x00070000,MajorOperatingSystem = 0x00020000,MajorOther = 0x00000000,MajorPower = 0x00060000,MajorSoftware = 0x00030000,MajorSystem = 0x00050000,MinorBlueScreen = 0x0000000F,MinorCordUnplugged = 0x0000000b,MinorDisk = 0x00000007,MinorEnvironment = 0x0000000c,MinorHardwareDriver = 0x0000000d,MinorHotfix = 0x00000011,MinorHung = 0x00000005,MinorInstallation = 0x00000002,MinorMaintenance = 0x00000001,MinorMMC = 0x00000019,MinorNetworkConnectivity = 0x00000014,MinorNetworkCard = 0x00000009,MinorOther = 0x00000000,MinorOtherDriver = 0x0000000e,MinorPowerSupply = 0x0000000a,MinorProcessor = 0x00000008,MinorReconfig = 0x00000004,MinorSecurity = 0x00000013,MinorSecurityFix = 0x00000012,MinorSecurityFixUninstall = 0x00000018,MinorServicePack = 0x00000010,MinorServicePackUninstall = 0x00000016,MinorTermSrv = 0x00000020,MinorUnstable = 0x00000006,MinorUpgrade = 0x00000003,MinorWMI = 0x00000015,FlagUserDefined = 0x40000000,FlagPlanned = 0x80000000} to 3楼果然是高人 但是以我现在的实力 我不会调用系统api啊看来还是要修炼 谢谢啊 这个想法确实比较好 任何一个进程死了我就去调用关机命令 很好不过我还去攻克下调用系统 api 挑战下 调用API [StructLayout(LayoutKind.Sequential, Pack = 1)] internal struct LUID_AND_ATTRIBUTES { public LUID pLuid; public int Attributes; } [StructLayout(LayoutKind.Sequential, Pack = 1)] internal struct TOKEN_PRIVILEGES { public int PrivilegeCount; public LUID_AND_ATTRIBUTES Privileges; } [StructLayout(LayoutKind.Sequential, Pack = 1)] internal struct LUID { public int LowPart; public int HighPart; } public class PrivilegeException : Exception { public PrivilegeException() : base() { } public PrivilegeException(string message) : base(message) { } } [DllImport("advapi32.dll", EntryPoint = "OpenProcessToken", CharSet = CharSet.Ansi)] private static extern int OpenProcessToken(IntPtr ProcessHandle, int DesiredAccess, ref IntPtr TokenHandle); private const int TOKEN_ADJUST_PRIVILEGES = 0x20; private const int TOKEN_QUERY = 0x8; [DllImport("user32.dll", EntryPoint = "FormatMessageA", CharSet = CharSet.Ansi)] private static extern int FormatMessage(int dwFlags, IntPtr lpSource, int dwMessageId, int dwLanguageId, StringBuilder lpBuffer, int nSize, int Arguments); private const int FORMAT_MESSAGE_FROM_SYSTEM = 0x1000; protected static string FormatError(int number) { StringBuilder buffer = new StringBuilder(255); FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, IntPtr.Zero, number, 0, buffer, buffer.Capacity, 0); return buffer.ToString(); } [DllImport("advapi32.dll", EntryPoint = "LookupPrivilegeValueA", CharSet = CharSet.Ansi)] private static extern int LookupPrivilegeValue(string lpSystemName, string lpName, ref LUID lpLuid); private const int SE_PRIVILEGE_ENABLED = 0x2; [DllImport("advapi32.dll", EntryPoint = "AdjustTokenPrivileges", CharSet = CharSet.Ansi)] private static extern int AdjustTokenPrivileges(IntPtr TokenHandle, int DisableAllPrivileges, ref TOKEN_PRIVILEGES NewState, int BufferLength, ref TOKEN_PRIVILEGES PreviousState, ref int ReturnLength); [DllImport("user32.dll", EntryPoint = "ExitWindowsEx", CharSet = CharSet.Ansi)] private static extern int ExitWindowsEx(int uFlags, int dwReserved); 在窗口关闭事件里写代码,直接关机,可以调用shutdown 写个服务与你进程进行通信。通信的方式你可以任选。当进程被KILL,就重起。 怎么获得form窗体中checkbox的选中个数? 【求指点】VS2008 制作新版本安装包 问题 如何显示某文件夹内的所有文件名 关于Access数据库的问题 输入字符的格式不正确 想过这个问题没有 c/s架构的聊天室房间要什么实现?如QQ聊天室的房间 能否定时从数据库(SQL)中导出TXT文本文件? 关于SQL事务! 装msdn遇到了问题. 能用DATAGRID显示电子商务的产品信息,主要是显示的位置。左边正列是产品图片,右边一列的多行中显示产品信息 怎么进行内存优化! winform中的链接问题
[DllImport("user32.dll")]
static extern bool ExitWindowsEx(ExitWindows uFlags, ShutdownReason dwReason);
[STAThread]
static void Main(string[] args)
{
ExitWindowsEx(ExitWindows.LogOff, ShutdownReason.MajorOther & ShutdownReason.MinorOther);
}
public enum ExitWindows : uint
{
LogOff = 0x00, //注销
ShutDown = 0x01, //关机
Reboot = 0x02, //重启
Force = 0x04,
PowerOff = 0x08,
ForceIfHung = 0x10
}public enum ShutdownReason : uint
{
MajorApplication = 0x00040000,
MajorHardware = 0x00010000,
MajorLegacyApi = 0x00070000,
MajorOperatingSystem = 0x00020000,
MajorOther = 0x00000000,
MajorPower = 0x00060000,
MajorSoftware = 0x00030000,
MajorSystem = 0x00050000,
MinorBlueScreen = 0x0000000F,
MinorCordUnplugged = 0x0000000b,
MinorDisk = 0x00000007,
MinorEnvironment = 0x0000000c,
MinorHardwareDriver = 0x0000000d,
MinorHotfix = 0x00000011,
MinorHung = 0x00000005,
MinorInstallation = 0x00000002,
MinorMaintenance = 0x00000001,
MinorMMC = 0x00000019,
MinorNetworkConnectivity = 0x00000014,
MinorNetworkCard = 0x00000009,
MinorOther = 0x00000000,
MinorOtherDriver = 0x0000000e,
MinorPowerSupply = 0x0000000a,
MinorProcessor = 0x00000008,
MinorReconfig = 0x00000004,
MinorSecurity = 0x00000013,
MinorSecurityFix = 0x00000012,
MinorSecurityFixUninstall = 0x00000018,
MinorServicePack = 0x00000010,
MinorServicePackUninstall = 0x00000016,
MinorTermSrv = 0x00000020,
MinorUnstable = 0x00000006,
MinorUpgrade = 0x00000003,
MinorWMI = 0x00000015,
FlagUserDefined = 0x40000000,
FlagPlanned = 0x80000000
}
这个想法确实比较好 任何一个进程死了我就去调用关机命令 很好不过我还去攻克下调用系统 api 挑战下
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct LUID_AND_ATTRIBUTES
{
public LUID pLuid;
public int Attributes;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct TOKEN_PRIVILEGES
{
public int PrivilegeCount;
public LUID_AND_ATTRIBUTES Privileges;
}
[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct LUID
{
public int LowPart;
public int HighPart;
}
public class PrivilegeException : Exception
{
public PrivilegeException() : base() { }
public PrivilegeException(string message) : base(message) { }
} [DllImport("advapi32.dll", EntryPoint = "OpenProcessToken", CharSet = CharSet.Ansi)]
private static extern int OpenProcessToken(IntPtr ProcessHandle, int DesiredAccess, ref IntPtr TokenHandle);
private const int TOKEN_ADJUST_PRIVILEGES = 0x20;
private const int TOKEN_QUERY = 0x8;
[DllImport("user32.dll", EntryPoint = "FormatMessageA", CharSet = CharSet.Ansi)]
private static extern int FormatMessage(int dwFlags, IntPtr lpSource, int dwMessageId, int dwLanguageId, StringBuilder lpBuffer, int nSize, int Arguments);
private const int FORMAT_MESSAGE_FROM_SYSTEM = 0x1000;
protected static string FormatError(int number)
{
StringBuilder buffer = new StringBuilder(255);
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, IntPtr.Zero, number, 0, buffer, buffer.Capacity, 0);
return buffer.ToString();
}
[DllImport("advapi32.dll", EntryPoint = "LookupPrivilegeValueA", CharSet = CharSet.Ansi)]
private static extern int LookupPrivilegeValue(string lpSystemName, string lpName, ref LUID lpLuid);
private const int SE_PRIVILEGE_ENABLED = 0x2;
[DllImport("advapi32.dll", EntryPoint = "AdjustTokenPrivileges", CharSet = CharSet.Ansi)]
private static extern int AdjustTokenPrivileges(IntPtr TokenHandle, int DisableAllPrivileges, ref TOKEN_PRIVILEGES NewState, int BufferLength, ref TOKEN_PRIVILEGES PreviousState, ref int ReturnLength);
[DllImport("user32.dll", EntryPoint = "ExitWindowsEx", CharSet = CharSet.Ansi)]
private static extern int ExitWindowsEx(int uFlags, int dwReserved);
当进程被KILL,就重起。