gpt4 book ai didi

windows-7 - Windows现在必须重新启动,因为[我们的服务名称]服务意外终止

转载 作者:行者123 更新时间:2023-12-02 07:19:15 24 4
gpt4 key购买 nike

作为免责声明,我将其发布在这里是因为我只看到有关这种行为的评论,人们已经指出了系统可能出现的问题。如果这不是发布此内容的正确位置,请告诉我,我将在其他人提出编码问题的地方发布。

话虽如此,我已经看到许多帖子说“由于服务意外终止,现在必须重新启动Windows”。我的情况有所不同,因为投诉与我公司编写的专有服务有关。

我的公司生产机器,目前其中一台作为发行版在现场运行,因此发生了服务崩溃。专有服务是为此机器编写的,并且已经过广泛的测试。它在Win7 32位上运行,并且Windows更新已关闭。该服务使用VS2010用C++编写。

在5/28/20,下午5:05到5:16之间,此服务发生了5次不同的崩溃。每次系统显示错误消息“因为[我们的服务名称]服务意外终止,Windows现在必须重新启动”。当我查看崩溃转储时,每次它都坐在对sprintf()的调用上,该调用堆栈在_invoke_watson()处结束。首次打开故障转储时,崩溃的错误对话框显示“未处理的异常...:无效的参数已传递给C运行时函数。”当我查看sprintf调用时,相关的行是:

char buff[10];
if (sprintf_s(buff, sizeof(buff)/sizeof(buff[0]), "%04d%02d%02d", iyear, imonth, iday) < 0)

这些崩溃在sprintf_s()调用上。 iyear,imonth和iday都是整数,因此它们必须具有值,但是它们是从FILETIME结构(由对GetSystemTimeAsFileTime()的调用填充)中检索的值,该值已转换为SYSTEMTIME结构(由a填充)调用FileTimeToSystemTime()。但是无论哪种方式,一个int应该是一个int。

当我查看系统事件查看器时,对于每次崩溃,它都给出一个异常代码0xc0000417和一个系统事件ID 1000(这当然意味着由于未知事件而崩溃)。

除了在这13分钟的时间间隔内,这从未发生过,此后也从未发生过,这一事实使我感到困惑。我正在尝试进一步研究此问题,但是我不知道为什么仅在15分钟的时间内进行一个简单的sprintf调用就能做到这一点。

关于我应该向系统“提问”的问题,是否有人有任何建议?我非常擅长系统工作,但不是系统专家。对于我继续前进的任何建议将不胜感激。

同样,请让我知道这是发布此问题的错误位置。

最佳答案

您必须超越buff。诸如%04d之类的格式说明符不能保证放置在缓冲区中的字符串将不超过4个字符,因此,如果iyear以某种方式包含的值> 9999,则您将编写超过允许的4个字符的空格。类似于imonthiday

因此,我将对这些值添加一些边界检查,以确保您不会溢出缓冲区。如果它们超出范围(例如应用程序事件日志),您也可以将它们输出到某种调试日志中,以帮助您跟踪问题。

至于在服务崩溃时关闭Windows,请参阅:https://devblogs.microsoft.com/oldnewthing/20180216-00/?p=98035(如果您还不知道的话)。

关于windows-7 - Windows现在必须重新启动,因为[我们的服务名称]服务意外终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62140828/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com