强行关机失败谁遇见过?(100分)

  • 主题发起人 主题发起人 forss
  • 开始时间 开始时间
F

forss

Unregistered / Unconfirmed
GUEST, unregistred user!
在有瑞星等防毒程序的机子上运行强行关机函数ExitWindowsEx(EWX_ShutDown,0)<br>导致系统死锁?何故?有人遇见过么?如何解决?
 
难道你没碰到过热启动不了的事吗
 
呵呵,当然有啦...你也碰到过?<br>刚才发错了.ExitWindowsEx(EWX_ShutDown or EWx_force,0)的时候才会死锁,<br>ExitWindowsEx(EWX_ShutDown,0)是可以正常关机的..sorry.<br>Ewx_Reboot参数也一样..:(
 
这个问题讨论过,我也曾经实验过,不过很遗憾,我实验的那个计算机上没有出现这个问题。<br>不过,分析原理,应该是瑞星对你发出的ExitWindowsEx等返回了False,不允许关闭。<br>所以导致了问题。<br>不过死机就有点怪了,当时那个问题说的是关机失败。
 
如果没有加EWX_Force的参数,就不会失败,也不会死机,<br>而且,如果我只有EWX_FORCE这个参数就会导致死机,不行你试试,,98下.<br>何解?EWX_FORCE这个参数到底什么问题?
 
当时得出的结论是瑞星太霸道了,而且狠狠的将瑞星给骂了一通,呵呵。<br>你尝试关闭瑞星,然后再执行,看一些结果。
 
我一把瑞星去掉就很正常了..问题是不光光是瑞星的问题,<br>其他的防毒程序也会导致这个问题,无奈.......<br>我想问题还是出在EWX_FORCE这个参数上,因为没加这个参数是什么问题都没有的,<br>不管装了什么防毒程序..:(
 
ewx_force为强制关闭所有程序。<br>根据delphi帮助,当设置本标记时,<br>系统中运行的应用程序不会收到WM_QUERYENDSESSION和<br>WM_ENDSESSION,所以不要轻易设置本标记,<br>只在紧急情况下设置。<br>相信其它人还应有更好的解释,您耐心点。<br>
 
你说的情况我知道..现在就是需要强行关机的,<br>我认为EWX_FORCE这个参数的解释还没什么地方没讲到的...<br>请继续..................
 
第一可能电源开关坏:),可以将跳线改到的reset那个上面呵呵以后reset没得用了,<br>我以前的那台就是这样啊!!<br>第二主板有问题一般是那个电容的事:(那就惨了
 
可能是那些防毒软件是需要在系统挂住怎么怎么的,它没收到关闭系统的消息,结果强行<br>终止那个进程把系统搞坏了.<br>如果不用那个参数,防毒软件可以正常退出,恢复一些环境,所以不死机
 
如何解决??<br>是否要找到防毒软件挂住的系统进程,然后杀掉??<br>用什么东西来找呀??
 
看能不能找到那个窗口,post一个WM_QUIT消息给它让它自己退出啦
 
Pipi:<br>&nbsp; &nbsp; &nbsp;哪个窗口?如果是防毒程序所开的后台进程导致的原因我如何找到?<br>再说不只瑞星一个防毒程序会有这种情况,我想知道有没有安全,强制的关闭其他进程<br>的方法?
 
如果你的系统是NT或2000 则关机还要有权限,否则关不了的<br>你从 http://antic_ant.delphibbs.com 下一个readtools 或program manager<br>运行一样你也关不了机!有原码,研究一下<br>
 
antic_ant:<br>NT和2000的情况我知道...我说的是98!<br>相反在NT和2000下我的强行关机和重启就都可以。不管装了多少防毒软件。
 
那登录的权限你会设置吗?<br>请查看id=681576
 
我倒,如果我不会NT和2000下我能关的了机么!!!
 
antic_ant:<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;那个问题和我这个问题没有关系吧,,NT和2000下关机和重启也和那个没关系<br>function TWinSystem.SetPrivilege(<br>&nbsp; sPrivilegeName : string;<br>&nbsp; bEnabled : boolean )<br>&nbsp; &nbsp; : boolean;<br>var<br>&nbsp; TPPrev,<br>&nbsp; TP &nbsp; &nbsp; &nbsp; &nbsp; : TTokenPrivileges;<br>&nbsp; Token &nbsp; &nbsp; &nbsp;: THandle;<br>&nbsp; dwRetLen &nbsp; : DWord;<br>begin<br>&nbsp; Result := False;<br><br>&nbsp; OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,Token );<br><br>&nbsp; TP.PrivilegeCount := 1;<br>&nbsp; if( LookupPrivilegeValue(<br>&nbsp; &nbsp; &nbsp; &nbsp; Nil,<br>&nbsp; &nbsp; &nbsp; &nbsp; PChar( sPrivilegeName ),<br>&nbsp; &nbsp; &nbsp; &nbsp; TP.Privileges[ 0 ].LUID ) )then<br>&nbsp; begin<br>&nbsp; &nbsp; if( bEnabled )then<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; TP.Privileges[ 0 ].Attributes &nbsp;:=<br>&nbsp; &nbsp; &nbsp; &nbsp; SE_PRIVILEGE_ENABLED;<br>&nbsp; &nbsp; end else<br>&nbsp; &nbsp; begin<br>&nbsp; &nbsp; &nbsp; TP.Privileges[ 0 ].Attributes &nbsp;:=<br>&nbsp; &nbsp; &nbsp; &nbsp; 0;<br>&nbsp; &nbsp; end;<br><br>&nbsp; &nbsp; dwRetLen := 0;<br>&nbsp; &nbsp; Result := AdjustTokenPrivileges(<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Token,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; False,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TP,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SizeOf( TPPrev ),<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TPPrev,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dwRetLen );<br>&nbsp; end;<br>&nbsp; CloseHandle( Token );<br>end;<br>然后SetPrivilege( 'SeShutdownPrivilege', True )就可以了呀。
 
而且在98下还不只关不了,还要加上死机!
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
811
import
I
后退
顶部