首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

程序关不了机,Win7停可以,XP都不行

2013-08-06 
程序关不了机,Win7下可以,XP都不行各种关机代码都试了:1,protected override void WndProc(ref Message m)

程序关不了机,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。开个进程。
[解决办法]

引用:
Quote: 引用:

杯具了,说错了,是程序阻止了电脑关机,怎么关都不行
找了很多原因就是管不了。。


什么程序阻止关机?
你的程序
[解决办法]
如果你是想除关机之外,取消用户关闭的行为,你可以试试

        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();

[解决办法]
程序关不了机,Win7停可以,XP都不行仅实验和测试用用...
参考
http://zhidao.baidu.com/question/125165811.html

 
[解决办法]
我滴神,你自己做的程序,可疑的地方你都排查不出来?至少你得说出自己认为几个可疑的地方,别人才好帮你分析呀,就这么一两介绍,估计只有神才能帮你了.

[解决办法]
引用:
Quote: 引用:

Quote: 引用:

程序发布了16个版本了,一直没解决这个问题。只要我把我们的程序退出了,才能关机


我也是试了很多次,这种原因
第一:主要是要利用timer或者线程来循环检查版本或者任务计划时间之类的,然后程序运行过程中又不可能关掉线程或者停止timer计时,就会导致XP系统无法回收释放线程占用的内存,导致关机不能。
第二:启动窗体的closing事件被重新定义,就是托盘程序,一般我们都希望启动窗体又能启动托盘程序,也能在上面加空间实现某些功能,这样就需要把closing事件定义掉,这样也会造成关机不能。

你说的第一点是不是关机时将Timer禁用掉,同时释放掉,第二点 什么是Closing事件被重新定义?


对,第一点就是关机时无法释放循环中的线程和timer资源导致无法关机,需要再窗体Closing事件中加上释放资源的语句。例如timer.Stop() 
第二个,窗体的Closing事件默认是执行窗体的资源释放任务,就是窗体的this.Diposed(),如果为了让点击窗体关闭按钮而不关闭窗体就重新把Closing事件定义成只执行窗体的this.Hide(),就会导致关机时窗体无法执行this.Diposed(),也就无法释放窗体资源,当然就关闭不了系统了。所以尽量不要重新定义程序启动窗体的Closing事件,不过目前我只发现在XP下会出现这种屎一样的bug。

另外,由于XP系统的尿性,所以不光是上面说到的两种情况,尽量在代码中实现窗体,线程,网络ping,数据库连接等类似对象的自我释放资源,否则很难保证会不会有哪个对象资源释放不了导致关闭不了系统。
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

杯具了,说错了,是程序阻止了电脑关机,怎么关都不行
找了很多原因就是管不了。。


什么程序阻止关机?
你的程序
一个通讯软件,基于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
------解决方案--------------------


如果有软件阻止关机有软件硬要关机不知道听谁的了程序关不了机,Win7停可以,XP都不行
2013年07月27日→星座:狮子座
二〇一三年六月二十
癸巳〖蛇〗己未月甲午日己巳时
今属:木;五行:水火土木;缺:金。
纳音五行:长流水。
[解决办法]

引用:
这是我第一个版本就这么写了,没用,不知道什么阻止了关机,一个不该花时间解决的问题,成了每个版本都得去解决的问题

你试试在那个条件判断里面写下log日志,看看条件判断是否正确,如果正确,后面就没有任何阻止关机的代码存在了,还会阻止关机,说明是其它地方的问题。
[解决办法]
引用:
楼主
加了线程或者timer控件之类的或者重新定义了启动窗体的closing事件吧?
正好最近我也遇到过类似问题,XP系统的内存回收机制太烂才会导致这样的情况发生,什么调用API捕获关机信息之类的办法我都试完了,没戏。
我的解决方法:
1:把启动窗体留空,什么都不敢,确保不会定义到closing事件(就是让closing事件干它默认该干的事,就是this.Disposed()
2:在启动窗体的closing事件里加上停止线程或者停止timer控件计时的代码,最后也别忘了加上this.Disposed()

可能比较业余,但是确实解决了。希望能帮到你。
三余
[解决办法]
究竟是怎么回事呢
[解决办法]
引用:
Quote: 引用:

楼主
加了线程或者timer控件之类的或者重新定义了启动窗体的closing事件吧?
正好最近我也遇到过类似问题,XP系统的内存回收机制太烂才会导致这样的情况发生,什么调用API捕获关机信息之类的办法我都试完了,没戏。
我的解决方法:
1:把启动窗体留空,什么都不敢,确保不会定义到closing事件(就是让closing事件干它默认该干的事,就是this.Disposed()
2:在启动窗体的closing事件里加上停止线程或者停止timer控件计时的代码,最后也别忘了加上this.Disposed()

可能比较业余,但是确实解决了。希望能帮到你。
三余


佛剑大师

话说在这里认道友不太合适吧…
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

楼主
加了线程或者timer控件之类的或者重新定义了启动窗体的closing事件吧?
正好最近我也遇到过类似问题,XP系统的内存回收机制太烂才会导致这样的情况发生,什么调用API捕获关机信息之类的办法我都试完了,没戏。
我的解决方法:
1:把启动窗体留空,什么都不敢,确保不会定义到closing事件(就是让closing事件干它默认该干的事,就是this.Disposed()
2:在启动窗体的closing事件里加上停止线程或者停止timer控件计时的代码,最后也别忘了加上this.Disposed()

可能比较业余,但是确实解决了。希望能帮到你。
三余


佛剑大师

话说在这里认道友不太合适吧…
有啥不合适的 ,黄色论坛里我都认啊
[解决办法]
你没有权限吧
[解决办法]
用管理员身份运行

热点排行