我在C#/ WPF / Prism应用程序中遇到了可疑问题。我做了一个方法来阻止第二次和更多的执行借助互斥锁。这适用于Windows 7.当我尝试使用Windows 10运行此应用程序时,应用程序首先按预期启动,第二次启动有时会导致仅显示我的错误消息,但主要是显示我的错误消息,并在单击确定后,弹出一个Windows对话框,显示"程序已停止工作"。在Windows 10系统的事件日志中是一个新的应用程序日志条目
Faulting application name: application.name, version: 0.1.11.0, time stamp: 0x5a01baef
Faulting module name: KERNELBASE.dll, version: 10.0.16299.15, time stamp: 0x2cd1ce3d
Exception code: 0xc000041d
Fault offset: 0x001008b2
Faulting process ID: 0x19bc
Faulting application start time: 0x01d357cfe3c8bc58
Faulting application path:
Faulting module path: C:\WINDOWS\System32\KERNELBASE.dll
Report ID: 525f81c7-cccb-49f3-9c25-01c877056b83
Faulting package full name:
Faulting package-relative application ID:
如果我在this.shutdown之后添加一个Messagebox.Show语句,则该过程在Windows 10下运行正常,但这可能不是一个正确的解决方案。
这个东西只有在应用程序通过双击运行在Visual Studio中运行时才会发生这种情况不能重现这种不当行为。我还附加了一个全局异常处理,它也没有带来这个错误。
感谢您帮助找到解决方案。
编辑:最小示例
protected override void OnStartup(StartupEventArgs e)
{
// Global exception handling
Application.Current.DispatcherUnhandledException += new DispatcherUnhandledExceptionEventHandler(AppDispatcherUnhandledException);
try
{
// getting the settings
ISettingsRepo _settingsRepo = new SettingsRepo();
if (mutex.WaitOne(TimeSpan.Zero, true))
{
Bootstrapper bs = new Bootstrapper();
bs.Run();
mutex.ReleaseMutex();
}
else
{
var messageText = "nostart";
MessageBox.Show(messageText, System.Windows.Application.Current.Resources["ApplicaionTitle"].ToString(), MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK, MessageBoxOptions.DefaultDesktopOnly);
this.Shutdown();
}
}
catch (Exception ex)
{
throw ex;
}
}
答案 0 :(得分:0)
试试这个 - Environment.Exit(0);