@ -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
}
}
}