检测关闭并停止它

Drkater.

新成员
加入
2019年6月6日
消息
3
编程经验
1-3
好吧,虽然我已经有一些编码体验,但我刚刚进入C#,我找不到任何可能导致它相对不寻常的文件。我想制作一个程序,当检查复选框时,它会检测到PC是否会关闭并停止它,所以您可以称之为"anti-shutdown"。如果有人可以帮助我,或者告诉我C#甚至是正确的语言,那将是完美的。
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
我首先会拦截负责的事件 当前关闭的会议 并附加一个事件处理程序,然后从那个事件中,我会检查是否检查了您的小复选框,如果检查(true),那么您可以尝试 AbortSystemShutdownA 通过这个电话 拦截然后取消关机过程。您还可以在有关文档中找到更多信息 关闭事件。这也可以使用 Pinvoke.. - Search Shutdown on the Pinvoke page. If you have a specific question regarding implementing any of these events, post up what you've tried and we can try to help you from there.

希望这可以帮助。
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,162
地点
挪威
编程经验
10+

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,904
地点
切萨皮克,va.
编程经验
10+
通常,作为Windows服务,您不希望干扰正常启动并关闭Windows。考虑在操作系统和修补时会发生的事情,并且需要重新启动修补程序以使修补程序有效。通过防止重新启动发生,您可能会将关键安全修复程序保留到计算机。

出于好奇,对您服务规定需要能够防止Windows关闭的功能如此重要?
 

Drkater.

新成员
加入
2019年6月6日
消息
3
编程经验
1-3
通常,作为Windows服务,您不希望干扰正常启动并关闭Windows。考虑在操作系统和修补时会发生的事情,并且需要重新启动修补程序以使修补程序有效。通过防止重新启动发生,您可能会将关键安全修复程序保留到计算机。

出于好奇,对您服务规定需要能够防止Windows关闭的功能如此重要?
好吧,我真的很慢,所以,永远下载更新等,所以需要几次,当我在一夜之间离开它时,我会在早上发现我的电脑关机,所以基本上我的窗户完全关闭自己一些时间点,我想防止那个,所以我不必从一开始就开始新下载
 

Drkater.

新成员
加入
2019年6月6日
消息
3
编程经验
1-3
这是一个Windows服务吗?他们通常没有gui和"checkbox".

还有这篇文章的阅读录制: Windows Vista(Windows)的应用程序关闭更改| Microsoft Docs.

谢谢你的文章,我现在要读它,但要回答你的问题,我会解释一下更详细的,我想创建一个程序,所以一个简单的UI上有一个复选框,这个程序应该(如果选中复选框))检测Windows将关闭Windows是否已关闭,如果是,则停止其关闭。为什么?为此,请阅读我对跳伞运动员的回复
 

跳伞运动员

工作人员
加入
2019年4月6日
消息
2,904
地点
切萨皮克,va.
编程经验
10+
好吧,我真的很慢,所以,永远下载更新等,所以需要几次,当我在一夜之间离开它时,我会在早上发现我的电脑关机,所以基本上我的窗户完全关闭自己一些时间点,我想防止那个,所以我不必从一开始就开始新下载
我将首先查看所配置的电源设置。在当前电源设置中打开一定数量的空闲时间后,您可以选择睡眠或关机的选项。尝试改变到"High Performance". If you've left "High Performance"作为其默认设置,它不会关闭计算机。

你用什么用来下载?大多数现代Web浏览器知道如何从被切断的下载中恢复 - 除非您碰巧以隐身模式运行。如果您以隐身模式运行,那么是的,它应该忘记您对任何特定Web会话的任何状态。

所有的BitTorrent客户端都知道从下载中恢复,因为这就是协议的工作原理。它应该从互联网上获得的任何位重建一个文件。您机器上的任何位都不需要重新下载。
 

约翰

C#论坛主持人
工作人员
加入
2011年4月23日
消息
1,162
地点
挪威
编程经验
10+
我想创建一个程序,所以一个简单的UI,上面有一个复选框
我现在将线程移动到Windows Forms论坛,Windows服务似乎对此不适合。我还将线程标题更改为描述性的东西。
 

jmplhinney.

C#论坛主持人
工作人员
加入
2011年4月23日
消息
3,732
地点
悉尼,澳大利亚
编程经验
10+
A Windows Forms form has a FormClosing event and the e.CloseReason property will tell you why it happened, including a Windows shutdown. Cancel closing the form and you prevent Windows shutting down.
 

sh

众所周知的成员
加入
2018年9月5日
消息
1,982
编程经验
10+
The e.Cancel = true; will prevent your application from closing, but if someone tries to log off, only your application will prevent windows from logging off. You should note; it won't stop the closure of other applications on the system while the logoff is commencing. When windows shuts down, it collects a list of running applications in need of being closed before the log off can commence. Depending on the order of the opened applications being cued for closure, whatever applications are cued before yours, will also be closed regardless of your applications current state, and windows will only halt when your application is being processed. Any applications cued after your application will also not be shut down. However, a user can still persist to ignore your applications state and force the log off to continue by way of interacting with log off screen. See pic :

会话 - 非日志记录.jpg


我可以考虑完全防止关机的唯一方法是(如果可能)更改一些安全策略以防止用户组能够手动注销。这不是我以前尝试过的东西,但可能有可能。 根据这个, there is an option to remove the button from the Start menu. So in theory, you could include using Microsoft.GroupPolicy; and get to work on rewriting the registry values. But yuck, and I would highly recommend you backup your registry in full before playing with a major part of the operating system if you're on a development machine or not. The Microsoft.GroupPolicy will give you much more control over a users ability to log off VIA the UI, but if they know how to reboot and log off via cmd, you may have a new problem on your hands to prevent that. Some here might argue that group policy might not be the best way to go about it.

〜添加缺少链接
 
Last edited:
最佳 底部