diff options
Diffstat (limited to 'MediaBrowser.ServerApplication/MainStartup.cs')
| -rw-r--r-- | MediaBrowser.ServerApplication/MainStartup.cs | 62 |
1 files changed, 60 insertions, 2 deletions
diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index 75f2a8f28..7780d4745 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -1,8 +1,10 @@ -using MediaBrowser.Common.Constants; +using System.Runtime.InteropServices; +using MediaBrowser.Common.Constants; using MediaBrowser.Common.Implementations.Logging; using MediaBrowser.Common.Implementations.Updates; using MediaBrowser.Model.Logging; using MediaBrowser.Server.Implementations; +using MediaBrowser.ServerApplication.Native; using Microsoft.Win32; using System; using System.ComponentModel; @@ -183,6 +185,7 @@ namespace MediaBrowser.ServerApplication private static void RunApplication(ServerApplicationPaths appPaths, ILogManager logManager, bool runService) { SystemEvents.SessionEnding += SystemEvents_SessionEnding; + SystemEvents.SessionSwitch += SystemEvents_SessionSwitch; _appHost = new ApplicationHost(appPaths, logManager); @@ -192,10 +195,24 @@ namespace MediaBrowser.ServerApplication { _app.AppStarted += (sender, args) => StartService(logManager); } - + else + { + // Not crazy about this but it's the only way to suppress ffmpeg crash dialog boxes + SetErrorMode(ErrorModes.SEM_FAILCRITICALERRORS | ErrorModes.SEM_NOALIGNMENTFAULTEXCEPT | + ErrorModes.SEM_NOGPFAULTERRORBOX | ErrorModes.SEM_NOOPENFILEERRORBOX); + } + _app.Run(); } + static void SystemEvents_SessionSwitch(object sender, SessionSwitchEventArgs e) + { + if (e.Reason == SessionSwitchReason.SessionLogon) + { + BrowserLauncher.OpenDashboard(_appHost.UserManager, _appHost.ServerConfigurationManager, _appHost, _logger); + } + } + /// <summary> /// Starts the service. /// </summary> @@ -224,6 +241,11 @@ namespace MediaBrowser.ServerApplication _appHost.Dispose(); + if (!_isRunningAsService) + { + SetErrorMode(ErrorModes.SYSTEM_DEFAULT); + } + if (_isRestarting) { using (var process = Process.Start("cmd", "/c net start " + BackgroundService.Name)) @@ -465,5 +487,41 @@ namespace MediaBrowser.ServerApplication service.Stop(); } } + + /// <summary> + /// Sets the error mode. + /// </summary> + /// <param name="uMode">The u mode.</param> + /// <returns>ErrorModes.</returns> + [DllImport("kernel32.dll")] + static extern ErrorModes SetErrorMode(ErrorModes uMode); + + /// <summary> + /// Enum ErrorModes + /// </summary> + [Flags] + public enum ErrorModes : uint + { + /// <summary> + /// The SYSTE m_ DEFAULT + /// </summary> + SYSTEM_DEFAULT = 0x0, + /// <summary> + /// The SE m_ FAILCRITICALERRORS + /// </summary> + SEM_FAILCRITICALERRORS = 0x0001, + /// <summary> + /// The SE m_ NOALIGNMENTFAULTEXCEPT + /// </summary> + SEM_NOALIGNMENTFAULTEXCEPT = 0x0004, + /// <summary> + /// The SE m_ NOGPFAULTERRORBOX + /// </summary> + SEM_NOGPFAULTERRORBOX = 0x0002, + /// <summary> + /// The SE m_ NOOPENFILEERRORBOX + /// </summary> + SEM_NOOPENFILEERRORBOX = 0x8000 + } } } |
