WPF程序停止工作

为轮子而生 2018-07-30 01:55:09
自从7月26日更新了一批系统补丁后,很多win7系统就无法再运行WPF程序了,具体表现如下:

1、启动程序后,到呈现窗体的地方,直接弹出“已停止工作”对话框,且无法捕捉错误
2、是所有的WPF程序都无法运行,哪怕是一个空的窗体,无任何代码,也不行。
3、试验了多台电脑,只要是win7系统(包括旗舰版、专业版),更新补丁后统统打不开程序了
4、系统日志里是KERNELBASE.DLL发生错误
5、事后即使再卸载补丁也无效

涉及补丁如下:
KB4093108 Windows 仅安全更新(2018.04) 高
KB4073578 Windows 更新程序 高
KB4338420 .Net Framework 4.6/4.6.1/4.6.2/4.7/4.7.1安全更新 高
KB4338423 .Net Framework 3.5 SP1安全更新 高
KB4338606 .Net Framework 4.6/4.6.1/4.6.2/4.7/4.7.1安全更新 高
KB4338612 .Net Framework 3.5 SP1安全更新 高
KB4338823 Windows 仅安全更新(2018.07)
KB4339093 Internet Explorer 累积安全更新 高
KB4022196 Office 兼容包 SP3 安全更新 高
KB4011202 Office 2007 安全更新 高

有没有谁遇到过类似的问题呢?事发紧急,用户那边已经大面积崩溃了!

...全文
2129 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
lindexi_gd 2018-11-29
  • 打赏
  • 举报
回复
引用 22 楼 sunnyzls 的回复:
话说这个问题解决了吗?我今天刚遇到这个问题,查了一圈也没有找到确切原因分析和有效的解决方法。 有谁解决了这个问题吗?
最新的补丁已经解决这个问题了,如果发现停止工作,请升级系统
sunnyzls 2018-11-22
  • 打赏
  • 举报
回复
话说这个问题解决了吗?我今天刚遇到这个问题,查了一圈也没有找到确切原因分析和有效的解决方法。
有谁解决了这个问题吗?
lindexi_gd 2018-08-16
  • 打赏
  • 举报
回复
引用 20 楼 rocmemory 的回复:
[quote=引用 18 楼 lindexi_gd 的回复:]
建议的方法是在还原后的设备,逐个安装补丁,这样可以定位是哪个补丁,或哪个几个补丁让WPF无法使用


能不能分享一下你安装的系统,我后来尝试了几个版本的win7,没有成功还原问题过程
现在需要还原问题,才能确定是哪个补丁的问题
[/quote]

我放在了百度云,但是链接总是失效…… 我这个镜像是从 IT某段子下载的 http://bbs.ithome.com/thread-531865-1-1.html



刚好我也是在开发 WPF ,方便的话加个 QQ 2844808902 或 Telegram lindexi 聊聊
为轮子而生 2018-08-16
  • 打赏
  • 举报
回复
引用 18 楼 lindexi_gd 的回复:
建议的方法是在还原后的设备,逐个安装补丁,这样可以定位是哪个补丁,或哪个几个补丁让WPF无法使用


能不能分享一下你安装的系统,我后来尝试了几个版本的win7,没有成功还原问题过程
现在需要还原问题,才能确定是哪个补丁的问题
qq14923349 2018-08-15
  • 打赏
  • 举报
回复
引用 12 楼 lindexi_gd 的回复:
能否在事件看器找系统的事件,看报告的错误是什么

+1 先找错误 windows 自带日志
lindexi_gd 2018-08-15
  • 打赏
  • 举报
回复
能否在事件看器找系统的事件,看报告的错误是什么
walter lv 2018-08-15
  • 打赏
  • 举报
回复
引用 18 楼 lindexi_gd 的回复:
建议的方法是在还原后的设备,逐个安装补丁,这样可以定位是哪个补丁,或哪个几个补丁让WPF无法使用


虚拟机很容易确认具体是哪个补丁。更重要的是微软必须马上知道这个问题并停止更新,直到解决。
lindexi_gd 2018-08-15
  • 打赏
  • 举报
回复
建议的方法是在还原后的设备,逐个安装补丁,这样可以定位是哪个补丁,或哪个几个补丁让WPF无法使用
为轮子而生 2018-08-15
  • 打赏
  • 举报
回复
引用 3 楼 assky124 的回复:
你的补丁我打过,貌似没问题


我们单位的电脑大面积中招,补丁是通过360企业版同一部署的,出问题的时间节点都是在发布了这些补丁的那天开始的,分析了一下应该不会有其他因素了
lindexi_gd 2018-08-15
  • 打赏
  • 举报
回复
引用 15 楼 rocmemory 的回复:
[quote=引用 13 楼 qq14923349 的回复:]
[quote=引用 12 楼 lindexi_gd 的回复:]
能否在事件看器找系统的事件,看报告的错误是什么

+1 先找错误 windows 自带日志[/quote]

问题描述中已经说过了,系统日志里就是“系统日志里是KERNELBASE.DLL发生错误”,没有更多信息
[/quote]

我尝试在一台win7的虚拟机安装了所有补丁,结果WPF无法使用,这个问题需要报给微软
为轮子而生 2018-08-15
  • 打赏
  • 举报
回复
引用 13 楼 qq14923349 的回复:
[quote=引用 12 楼 lindexi_gd 的回复:]
能否在事件看器找系统的事件,看报告的错误是什么

+1 先找错误 windows 自带日志[/quote]

问题描述中已经说过了,系统日志里就是“系统日志里是KERNELBASE.DLL发生错误”,没有更多信息
为轮子而生 2018-08-15
  • 打赏
  • 举报
回复
引用 12 楼 lindexi_gd 的回复:
能否在事件看器找系统的事件,看报告的错误是什么


问题描述中已经说过了,系统日志里就是“系统日志里是KERNELBASE.DLL发生错误”,没有更多信息
吉普赛的歌 2018-08-13
  • 打赏
  • 举报
回复
引用 8 楼 rocmemory 的回复:
[quote=引用 2 楼 yenange 的回复:]
https://blog.csdn.net/hht006158/article/details/80648979

看下这个办法有没有用?


不管用。。。
如何开CASE还请赐教
[/quote]

先进这个试试:
https://support.microsoft.com/zh-cn/getsupport?oaspworkflow=start_1.0.0.0&wf=0&wfname=productselection&gprid=1117&st=1&wfxredirect=1&sd=gn&ccsid=635804557460268950&forceorigin=esmc
jhone99 2018-08-13
  • 打赏
  • 举报
回复
是否.Net Framework那几个补丁冲突,wpf用什么版本Framework都不行么?
为轮子而生 2018-08-13
  • 打赏
  • 举报
回复
引用 2 楼 yenange 的回复:
https://blog.csdn.net/hht006158/article/details/80648979

看下这个办法有没有用?


不管用。。。
如何开CASE还请赐教
为轮子而生 2018-08-13
  • 打赏
  • 举报
回复
引用 6 楼 u010941149 的回复:
https://support.microsoft.com/zh-cn/help/4056897/windows-7-update-kb4056897



已经确认了,单位电脑有1700多台,受影响的大概有30台,全都是win7,无论怎么卸载补丁、安装后续补丁,都没有用,这些电脑如果不重装系统,可能终生就无法再运行WPF程序了。
sdfgrtyu 2018-07-31
  • 打赏
  • 举报
回复
https://support.microsoft.com/zh-cn/help/4056897/windows-7-update-kb4056897
sdfgrtyu 2018-07-31
  • 打赏
  • 举报
回复
确定,,,,,,
为轮子而生 2018-07-31
  • 打赏
  • 举报
回复
引用 3 楼 assky124 的回复:
你的补丁我打过,貌似没问题

能截图看一下你的已安装更新列表吗? 我试了好多种win7系统,只要一安装这几个补丁,WPF就彻底再见了。
你确定安装过这些补丁后启动过WPF程序吗?
assky124 2018-07-30
  • 打赏
  • 举报
回复
你的补丁我打过,貌似没问题
加载更多回复(2)
WPF 秒表 计时器 定时关机 到计时关机 public const uint WM_SYSCOMMAND = 0x0112; public const uint SC_MONITORPOWER = 0xF170; [DllImport("user32")] public static extern IntPtr SendMessage(IntPtr hWnd, uint wMsg, uint wParam, int lParam); /// /// 关闭显示器 /// public void CloseScreen() { IntPtr windowHandle = Process.GetCurrentProcess().MainWindowHandle; SendMessage(windowHandle, WM_SYSCOMMAND, SC_MONITORPOWER, 2); // 2 为关闭显示器, -1则打开显示器 } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Windows.Threading; using IniFiles; namespace StopWatch { /// /// shutdonwCtrl.xaml 的交互逻辑 /// public partial class shutdonwCtrl : UserControl { DispatcherTimer timer1; DispatcherTimer timer2; public shutdonwCtrl() { InitializeComponent(); timer1 = new DispatcherTimer(); timer1.Tick += new EventHandler(OnTimer1); timer1.Interval = new TimeSpan(0, 0, 1); timer2 = new DispatcherTimer(); timer2.Tick += new EventHandler(OnTimer2); timer2.Interval = new TimeSpan(0, 0, 1); btn_cancel.IsEnabled = false; cancel1.IsEnabled = false; } IniFile INI = new IniFile(IniFile.AppIniName); public void LoadIni() { cbo_hour.Text = INI.ReadString("定时关机", "时", "0"); cbo_Minute.Text = INI.ReadString("定时关机", "分", "0"); cbo_Second.Text = INI.ReadString("定时关机", "秒", "0"); cbo1.Text = INI.ReadString("到计时关机", "分", "0"); //combobox1.Text = INI.ReadString("到计时", "时", "0"); //combobox2.Text = INI.ReadString("到计时", "分", "0"); //combobox3.Text = INI.ReadString("到计时", "秒", "0"); } public void SaveIni() { INI.WriteString("定时关机", "时", cbo_hour.Text); INI.WriteString("定时关机", "分", cbo_Minute.Text); INI.WriteString("定时关机", "秒", cbo_Second.Text); INI.WriteString("到计时关机", "分", cbo1.Text); } private void ShutDown() { System.Diagnostics.Process.Start("shutdown.exe", "-s -t 1"); } private void OnTimer1(object sender,EventArgs e) { if (second > 0) second--; label1.Content = string.Format("Windows将在 {0} 关机", TimerClass.GetTimeString1(second)); if (second <= 0 && !cbo1.IsEnabled) { ShutDown(); } } int second = 0; private void Button_Click(object sender, RoutedEventArgs e) { second = Convert.ToInt32(cbo1.Text) * 60; if (second <= 0) { MessageBox.Show("数值必须大于0!"); return; } timer1.Start(); cbo1.IsEnabled = false; cancel1.IsEnabled = true; start1.IsEnabled = false; } private void Button_Click_1(object sender, RoutedEventArgs e) { label1.Content = " "; timer1.Stop(); second = 0; cbo1.IsEnabled = true; cancel1.IsEnabled = false; start1.IsEnabled = true; } private void OnTimer2(object sender, EventArgs e) { if ( DateTime.Now.Hour == Convert.ToInt32(cbo_hour.Text) && DateTime.Now.Minute == Convert.ToInt32(cbo_Minute.Text) && DateTime.Now.Second == Convert.ToInt32(cbo_Second.Text) ) { ShutDown(); } } private void Button_Click_2(object sender, RoutedEventArgs e) { int s = Convert.ToInt32(cbo_hour.Text) * 3600 + Convert.ToInt32(cbo_Minute.Text) * 60 + Convert.ToInt32(cbo_Second.Text); timer2.Start(); label2.Content = string.Format("Windows将在 {0} 关机", TimerClass.GetTimeString1(s)); btn_start.IsEnabled = false; btn_cancel.IsEnabled = true; cbo_hour.IsEnabled = false; cbo_Minute.IsEnabled = false; cbo_Second.IsEnabled = false; } private void btn_cancel_Click(object sender, RoutedEventArgs e) { label2.Content = ""; timer2.Stop(); btn_start.IsEnabled = true; btn_cancel.IsEnabled = false; cbo_hour.IsEnabled = true; cbo_Minute.IsEnabled = true; cbo_Second.IsEnabled = true; } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Threading.Tasks; using System.Runtime.InteropServices; using System.Windows.Threading; using IniFiles; namespace StopWatch { /// /// TimerCtrl.xaml 的交互逻辑 /// public partial class TimerCtrl : UserControl { private DispatcherTimer timer1 = null; private DispatcherTimer timer2 = null; int SND_SYNC = 0x0000; /* play asynchronously */ //异步 int SND_ASYNC = 0x0001; int SND_LOOP = 8; [DllImport("winmm")] public static extern bool PlaySound(string szSound, IntPtr hMod, int flags); private void playSound3() { Task tsk = new Task(new Action(proc)); tsk.Start(); } private void proc() { PlaySound(@"Sound\2.wav", IntPtr.Zero, SND_SYNC); PlaySound(@"Sound\2.wav", IntPtr.Zero, SND_SYNC); PlaySound(@"Sound\2.wav", IntPtr.Zero, SND_SYNC); } public TimerCtrl() { InitializeComponent(); timer1 = new DispatcherTimer(); timer1.Tick += new EventHandler(OnTimer1); timer1.Interval = new TimeSpan(0, 0, 1); timer2 = new DispatcherTimer(); timer2.Tick += new EventHandler(OnTimer2); timer2.Interval = new TimeSpan(0, 0, 1); btn_reset1.IsEnabled = false; btn_pause1.IsEnabled = false; } int h = 0; int m = 0; int s = 0; int seconds = 0; private void OnTimer1(object sender, EventArgs e) { if (seconds < 1) { PlaySound(@"Sound\2.wav", IntPtr.Zero, SND_ASYNC); btn_start.IsEnabled = false; btn_reset1.IsEnabled = true; btn_pause1.IsEnabled = false; combobox1.IsEnabled = true; combobox2.IsEnabled = true; combobox3.IsEnabled = true; return; } seconds--; label1.Content = TimerClass.GetTimeString1(seconds); } private void btn_start_Click(object sender, RoutedEventArgs e) { h = Convert.ToInt32(combobox1.Text); m = Convert.ToInt32(combobox2.Text); s = Convert.ToInt32(combobox3.Text); seconds = h * 3600 + m * 60 + s; label1.Content = TimerClass.GetTimeString1(seconds); timer1.Start(); btn_start.IsEnabled = false; btn_reset1.IsEnabled = true; btn_pause1.IsEnabled = true; combobox1.IsEnabled = false; combobox2.IsEnabled = false; combobox3.IsEnabled = false; } private void btn_reset_Click(object sender, RoutedEventArgs e) { seconds = 0; label1.Content = TimerClass.GetTimeString1(seconds); timer1.Stop(); btn_start.IsEnabled = true; btn_reset1.IsEnabled = false; btn_pause1.IsEnabled = false; combobox1.IsEnabled = true; combobox2.IsEnabled = true; combobox3.IsEnabled = true; } private void pause1_Click(object sender, RoutedEventArgs e) { if (btn_pause1.Content.ToString() == "暂停") { timer1.Stop(); btn_pause1.Content = "继续"; } else { timer1.Start(); btn_pause1.Content = "暂停"; } } int SEC = 0; private void OnTimer2(object sender, EventArgs e) { if (SEC < 1) { timer2.Stop(); playSound3(); btn_quick.IsEnabled = true; btn_cancel2.IsEnabled = false; combobox4.IsEnabled = true; return; } SEC--; label4.Content = TimerClass.GetTimeString1(SEC); } private void Button_Click(object sender, RoutedEventArgs e) { SEC = Convert.ToInt32(combobox4.Text) * 60; timer2.Start(); combobox4.IsEnabled = false; btn_quick.IsEnabled = false; btn_cancel2.IsEnabled = true; } private void Button_Click_1(object sender, RoutedEventArgs e) { SEC = 2; label4.Content = "00:00:00"; timer2.Stop(); combobox4.IsEnabled = true; btn_quick.IsEnabled = true; } IniFile INI = new IniFile(IniFile.AppIniName); public void LoadIni() { combobox1.Text = INI.ReadString("到计时", "时", "0"); combobox2.Text = INI.ReadString("到计时", "分", "0"); combobox4.Text = INI.ReadString("快速计时", "分", "0"); } public void SaveIni() { INI.WriteString("到计时", "时", combobox1.Text); INI.WriteString("到计时", "分", combobox2.Text); INI.WriteString("到计时", "秒", combobox3.Text); INI.WriteString("快速计时", "分", combobox4.Text); } } } using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Threading; using System.Windows.Threading; namespace StopWatch { /// /// WatchCtrl.xaml 的交互逻辑 /// public partial class WatchCtrl : UserControl { public WatchCtrl() { InitializeComponent(); timer1 = new DispatcherTimer(); timer1.Tick += new EventHandler(OnTimer1); timer1.Interval = new TimeSpan(0, 0, 1); timer1_1 = new DispatcherTimer(); timer1_1.Tick += new EventHandler(OnTimer1_1); timer1_1.Interval = new TimeSpan(0, 0, 0, 100); timer2 = new DispatcherTimer(); timer2.Tick += new EventHandler(OnTimer2); timer2.Interval = new TimeSpan(0, 0, 1); } private DispatcherTimer timer1 = null; private DispatcherTimer timer1_1 = null; private DispatcherTimer timer2 = null; private void OnTimer1(object sender, EventArgs e) { second++; label1.Content = TimerClass.GetTimeString1(second) ;//DateTime.Now.ToString("h:mm:ss"); } public int second = 0; private int second1 = 0; public int count = 0; private void OnTimer1_1(object sender, EventArgs e) { //label1.Content = TimerClass.GetTimeString1(second) + "." + count.ToString();//DateTime.Now.ToString("h:mm:ss"); //count++; //if (count > 9) // count = 0; } private void OnTimer2(object sender, EventArgs e) { second1++; label2.Content = TimerClass.GetTimeString1(second1) ;//.ToString("h:mm:ss"); } private void btn_start_Click(object sender, RoutedEventArgs e) { timer1.Start(); timer2.Start(); if (btn_start.Content.ToString() == "停止") { btn_start.Content = "开始"; btn_reset.Content = "复位"; timer1.Stop(); timer2.Stop(); } else { btn_start.Content = "停止"; btn_reset.Content = "计次"; } } private int counter = 0; private void btn_reset_Click(object sender, RoutedEventArgs e) { if (btn_reset.Content.ToString() == "复位") { second = 0; second1 = 0; label1.Content = "00:00:00"; label2.Content = "00:00:00"; timer1.Stop(); timer2.Stop(); } else { if (second1 > 0) { counter++; listbox1.Items.Add(string.Format(" {0}\t{1}", counter, label2.Content)); } second1 = 0; label2.Content = "00:00:00"; } if (btn_reset.Content.ToString() == "复位" && btn_start.Content.ToString()=="开始") { listbox1.Items.Clear(); } } } }
## 主要功能 可以对可执行文件的启动,停止,显示,隐藏,重启操作

110,596

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧