关于关机与监控系统的难题(300分)

  • 主题发起人 主题发起人 LeonSu
  • 开始时间 开始时间
L

LeonSu

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟我现在遇到一个难题
有一家客户在安装了一套监控系统后,要求能自动开、关机,开机已解决了,但关机我
却快没办法了,因为那套软件运行时,我用ExitWindowsEx也好,或是用
Rundll user.exe,exitwindows也好,甚至软件控制把那套软件强行Quit了,都没办法做到
完全关机。
帮帮忙,救救小弟,最近客户+老板又再催我了。拜托各位了。
 
我 认 为 是 客 户 本 身 系 统 的 问 题, 可 能 是 它 本 来 就 不 能 正 常 关 机!
顺 便 问 一 下: 如 何 自 动 开 机?
 
怎么个不能关法儿?是关不掉,还是关机时死机?试试这样强行关:
ExitWindowsEx(EWX_FORCE + EWX_SHUTDOWN, 0);
 
不知道可不可以进行强行开关机
如果可以,可能通过定时开关的方法来解决
 
To:gerry yang
自动开机必须要主板支持才行,正好那块主板支持。

To:Fyx
是关机时死机,现象是当屏幕显示了“正在关闭系统”后,再到黑屏时,(正常情况是立即
关掉)但那台机器是左上角有个光标在闪呀,闪呀。。。(好象在说,我就是不关,你把我
如何?!),约30秒后,就开始听到蜂鸣器在长响(就象笑声一样)

To:wrf
How can I do?
 
这个程序是不是在运行时和EXE文件建立了关联,在这种情况下无法关机的再试试看
 
这种情况并不是你程序的问题,而是你的操作系统有问题,有可能是驱动程序有问题,建议你把
操作系统重新安装一下,应该可以解决,这相对来说还要省事些。
 
换一台机试试看吧,如果。。。
好象不是程序的问题。要不可以看看CMOS的设置,这样的故障可能与OS的关系不大。
 
你只要用windows本身的关机程序来关机试试就知道了,如果它能正常关机,说明是你程序
的问题,如果也不能,则说明是系统的问题。
不过,在正常情况下用ExitWindowsEx就能关机的。它是什么系统?
 
To:sunhuiNO1
是这样的吗?你确定吗?
据我所知,那套软件运行时打开了一个TAPISrv.exe的东东,我没办法关掉它,有可能是这
个原因。那我要如何做呢?因为TAPISRV.EXE运行时没有窗体,不可能用FindWindows的方法
去关掉它,而这个程序是用于修改与显示拨号内容的。
还有那套软件不停的在写硬盘,是不是与此有关,我又该如何做。谢谢大家!
 
;TAPISrv 是哪里的程序?寻找它的开发商,如果是一个 Com Server 就好了,找到接口中
的退出方法调用就可以了。
 
To: BaKuBaKu
TAPISRV.exe的开发商是微软!它在Windows/System,内部名称是Telephony Service。
你有办法吗?
 
我想问一下,你用鼠标点击开始菜单,也就是人工关机能正常关掉吗
 
如果希望强行关机,需要先调整程序的级别.
请参考以下代码:
procedure TForm1.AdjustToken();
var
hdlProcessHandle: Cardinal;
hdlTokenHandle: Cardinal;
tmpLuid: Int64;
tkpPrivilegeCount: Int64;
tkp: TOKEN_PRIVILEGES;
tkpNewButIgnored: TOKEN_PRIVILEGES;
lBufferNeeded: Cardinal;
Privilege: array[0..0] of _LUID_AND_ATTRIBUTES;
begin
hdlProcessHandle := GetCurrentProcess;
OpenProcessToken(hdlProcessHandle,
(TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY),
hdlTokenHandle);

// Get the LUID for shutdown privilege.
LookupPrivilegeValue('', 'SeShutdownPrivilege', tmpLuid);
Privilege[0].Luid := tmpLuid;
Privilege[0].Attributes := SE_PRIVILEGE_ENABLED;
tkp.PrivilegeCount := 1; // One privilege to set
tkp.Privileges[0] := Privilege[0];
// Enable the shutdown privilege in the access token of this process.
AdjustTokenPrivileges(hdlTokenHandle,
False,
tkp,
Sizeof(tkpNewButIgnored),
tkpNewButIgnored,
lBufferNeeded);
end;

procedure TForm1.CloseAll;
begin
AdjustToken;
ExitWindowsEx(EWX_SHUTDOWN + EWX_FORCE, 0);
end;
 
找到TAPISRV.exe的进程,杀丢它。
 
用我的《进程管理》3.0 Build 0201 For Win9X
可以强行将进程TApisrv.exe杀掉
你也可以在我的《进程管理》中设置定时关闭该进程,但我的程序中最多只让你
设置10000秒(将近三个小时),你可以设置为1秒,然后在你的程序中要关闭系统时运行
我的《进程管理》,然后稍加延时再运行关机命令试试。
下载地址:<a href="http://go8.163.com/~windstorm2000/program/proc.zip">进程管理</a>
欢迎光临<a href="http://ph11.126.com">风之纹章</a>
 
ExitWindowsEx()
强行关机:EWX_FORCE
不听话可能是有非法进程,如果可知,KILL!
呵呵 我也做了个简单进程管理(功能自然不能和wind2000的相比)
<b>公开源码</b>!可以在http://tingweb.yeah.net下载到
 
请继续或结束
 
后退
顶部