程序关不了机,Win7下可以,XP都不行
各种关机代码都试了:
1,
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0011://WM_QUERYENDSESSION
bExitApp = true;
m.Result = (IntPtr)1;
break;
default:
base.WndProc(ref m);
break;
}
}
private void FrmMsgMain_FormClosing(object sender, FormClosingEventArgs e)
{
if (bExitApp)
{
e.Cancel = false;
this.Close();
}
else
{
e.Cancel = true;
this.Hide();
}
}
2,监控系统关机在处理也没用
SystemEvents.SessionEnding += new SessionEndingEventHandler(SystemEvents_SessionEnding);
Windows?XP Windows?7 C# 关机
[解决办法]
System.Diagnostics.Process.Start("shutdown", "-s -t 0");
加一句这个就好在close()里
[解决办法]
用dos命令,调用Shutdown.exe。开个进程。
[解决办法]
什么程序阻止关机?
你的程序
[解决办法]
如果你是想除关机之外,取消用户关闭的行为,你可以试试
private void FrmMsgMain_FormClosing(object sender, FormClosingEventArgs e)
{
this.Visible = false;
if (e.CloseReason != CloseReason.WindowsShutDown)
{
e.Cancel = true;
}
}
只需这几代码就行,对于其他几种情况,你可以看一下CloseReason
[解决办法]
this.Visible = false;去掉,多写了
[解决办法]
只有关机或者用Environment.Exit或者结束进程才会关闭程序了
[解决办法]
楼主
加了线程或者timer控件之类的或者重新定义了启动窗体的closing事件吧?
正好最近我也遇到过类似问题,XP系统的内存回收机制太烂才会导致这样的情况发生,什么调用API捕获关机信息之类的办法我都试完了,没戏。
我的解决方法:
1:把启动窗体留空,什么都不敢,确保不会定义到closing事件(就是让closing事件干它默认该干的事,就是this.Disposed()
2:在启动窗体的closing事件里加上停止线程或者停止timer控件计时的代码,最后也别忘了加上this.Disposed()
可能比较业余,但是确实解决了。希望能帮到你。
[解决办法]
程序发布了16个版本了,一直没解决这个问题。只要我把我们的程序退出了,才能关机
我也是试了很多次,这种原因
第一:主要是要利用timer或者线程来循环检查版本或者任务计划时间之类的,然后程序运行过程中又不可能关掉线程或者停止timer计时,就会导致XP系统无法回收释放线程占用的内存,导致关机不能。
第二:启动窗体的closing事件被重新定义,就是托盘程序,一般我们都希望启动窗体又能启动托盘程序,也能在上面加空间实现某些功能,这样就需要把closing事件定义掉,这样也会造成关机不能。
[解决办法]
switch (m.Msg)
{
case 0x0011://WM_QUERYENDSESSION
bExitApp = true;
m.Result = (IntPtr)1;
Environment.Exit(1); //强退或者Application.ExitThread();
[解决办法]

参考
http://zhidao.baidu.com/question/125165811.html
[解决办法]
我滴神,你自己做的程序,可疑的地方你都排查不出来?至少你得说出自己认为几个可疑的地方,别人才好帮你分析呀,就这么一两介绍,估计只有神才能帮你了.
[解决办法]
你说的第一点是不是关机时将Timer禁用掉,同时释放掉,第二点 什么是Closing事件被重新定义?
程序发布了16个版本了,一直没解决这个问题。只要我把我们的程序退出了,才能关机
我也是试了很多次,这种原因
第一:主要是要利用timer或者线程来循环检查版本或者任务计划时间之类的,然后程序运行过程中又不可能关掉线程或者停止timer计时,就会导致XP系统无法回收释放线程占用的内存,导致关机不能。
第二:启动窗体的closing事件被重新定义,就是托盘程序,一般我们都希望启动窗体又能启动托盘程序,也能在上面加空间实现某些功能,这样就需要把closing事件定义掉,这样也会造成关机不能。
对,第一点就是关机时无法释放循环中的线程和timer资源导致无法关机,需要再窗体Closing事件中加上释放资源的语句。例如timer.Stop()
第二个,窗体的Closing事件默认是执行窗体的资源释放任务,就是窗体的this.Diposed(),如果为了让点击窗体关闭按钮而不关闭窗体就重新把Closing事件定义成只执行窗体的this.Hide(),就会导致关机时窗体无法执行this.Diposed(),也就无法释放窗体资源,当然就关闭不了系统了。所以尽量不要重新定义程序启动窗体的Closing事件,不过目前我只发现在XP下会出现这种屎一样的bug。
另外,由于XP系统的尿性,所以不光是上面说到的两种情况,尽量在代码中实现窗体,线程,网络ping,数据库连接等类似对象的自我释放资源,否则很难保证会不会有哪个对象资源释放不了导致关闭不了系统。
[解决办法]
一个通讯软件,基于TCP的 找了很多原因就是管不了。。
杯具了,说错了,是程序阻止了电脑关机,怎么关都不行
什么程序阻止关机?
你的程序
你需要把线程在窗体关闭事件里停掉
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x0011://WM_QUERYENDSESSION
bExitApp = true;
//在这里加上销毁线程的代码
m.Result = (IntPtr)1;
break;
default:
base.WndProc(ref m);
break;
}
}
原理同这个贴子
http://bbs.csdn.net/topics/390529220
------解决方案--------------------
如果有软件阻止关机有软件硬要关机不知道听谁的了

2013年07月27日→星座:狮子座
二一三年六月二十
癸巳〖蛇〗己未月甲午日己巳时
今属:木;五行:水火土木;缺:金。
纳音五行:长流水。
[解决办法]
这是我第一个版本就这么写了,没用,不知道什么阻止了关机,一个不该花时间解决的问题,成了每个版本都得去解决的问题
你试试在那个条件判断里面写下log日志,看看条件判断是否正确,如果正确,后面就没有任何阻止关机的代码存在了,还会阻止关机,说明是其它地方的问题。
[解决办法]
楼主
加了线程或者timer控件之类的或者重新定义了启动窗体的closing事件吧?
正好最近我也遇到过类似问题,XP系统的内存回收机制太烂才会导致这样的情况发生,什么调用API捕获关机信息之类的办法我都试完了,没戏。
我的解决方法:
1:把启动窗体留空,什么都不敢,确保不会定义到closing事件(就是让closing事件干它默认该干的事,就是this.Disposed()
2:在启动窗体的closing事件里加上停止线程或者停止timer控件计时的代码,最后也别忘了加上this.Disposed()
可能比较业余,但是确实解决了。希望能帮到你。
[解决办法]
究竟是怎么回事呢
[解决办法]
三余
楼主
加了线程或者timer控件之类的或者重新定义了启动窗体的closing事件吧?
正好最近我也遇到过类似问题,XP系统的内存回收机制太烂才会导致这样的情况发生,什么调用API捕获关机信息之类的办法我都试完了,没戏。
我的解决方法:
1:把启动窗体留空,什么都不敢,确保不会定义到closing事件(就是让closing事件干它默认该干的事,就是this.Disposed()
2:在启动窗体的closing事件里加上停止线程或者停止timer控件计时的代码,最后也别忘了加上this.Disposed()
可能比较业余,但是确实解决了。希望能帮到你。
佛剑大师
话说在这里认道友不太合适吧…
[解决办法]
三余
楼主
加了线程或者timer控件之类的或者重新定义了启动窗体的closing事件吧?
正好最近我也遇到过类似问题,XP系统的内存回收机制太烂才会导致这样的情况发生,什么调用API捕获关机信息之类的办法我都试完了,没戏。
我的解决方法:
1:把启动窗体留空,什么都不敢,确保不会定义到closing事件(就是让closing事件干它默认该干的事,就是this.Disposed()
2:在启动窗体的closing事件里加上停止线程或者停止timer控件计时的代码,最后也别忘了加上this.Disposed()
可能比较业余,但是确实解决了。希望能帮到你。
佛剑大师
话说在这里认道友不太合适吧…
[解决办法]
你没有权限吧
[解决办法]
用管理员身份运行