This commit is contained in:
Luke Pulverenti 2016-09-15 19:17:58 -04:00
commit c9032166b5

View File

@ -33,6 +33,7 @@ namespace MediaBrowser.ServerApplication
private static ILogger _logger; private static ILogger _logger;
private static bool _isRunningAsService = false; private static bool _isRunningAsService = false;
private static bool _canRestartService = false;
private static bool _appHostDisposed; private static bool _appHostDisposed;
[DllImport("kernel32.dll", SetLastError = true)] [DllImport("kernel32.dll", SetLastError = true)]
@ -68,6 +69,11 @@ namespace MediaBrowser.ServerApplication
var options = new StartupOptions(); var options = new StartupOptions();
_isRunningAsService = options.ContainsOption("-service"); _isRunningAsService = options.ContainsOption("-service");
if (_isRunningAsService)
{
_canRestartService = CanRestartWindowsService();
}
var currentProcess = Process.GetCurrentProcess(); var currentProcess = Process.GetCurrentProcess();
var applicationPath = currentProcess.MainModule.FileName; var applicationPath = currentProcess.MainModule.FileName;
@ -261,7 +267,14 @@ namespace MediaBrowser.ServerApplication
{ {
get get
{ {
return !_isRunningAsService; if (_isRunningAsService)
{
return _canRestartService;
}
else
{
return true;
}
} }
} }
@ -273,7 +286,14 @@ namespace MediaBrowser.ServerApplication
{ {
get get
{ {
return !_isRunningAsService; if (_isRunningAsService)
{
return _canRestartService;
}
else
{
return true;
}
} }
} }
@ -614,7 +634,11 @@ namespace MediaBrowser.ServerApplication
{ {
DisposeAppHost(); DisposeAppHost();
if (!_isRunningAsService) if (_isRunningAsService)
{
RestartWindowsService();
}
else
{ {
//_logger.Info("Hiding server notify icon"); //_logger.Info("Hiding server notify icon");
//_serverNotifyIcon.Visible = false; //_serverNotifyIcon.Visible = false;
@ -669,6 +693,47 @@ namespace MediaBrowser.ServerApplication
} }
} }
private static void RestartWindowsService()
{
_logger.Info("Restarting background service");
var startInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
Verb = "runas",
ErrorDialog = false,
Arguments = String.Format("/c sc stop {0} & sc start {0}", BackgroundService.GetExistingServiceName())
};
Process.Start(startInfo);
}
private static bool CanRestartWindowsService()
{
var startInfo = new ProcessStartInfo
{
FileName = "cmd.exe",
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
Verb = "runas",
ErrorDialog = false,
Arguments = String.Format("/c sc query {0}", BackgroundService.GetExistingServiceName())
};
using (var process = Process.Start(startInfo))
{
process.WaitForExit();
if (process.ExitCode == 0)
{
return true;
}
else
{
return false;
}
}
}
private static async Task InstallVcredist2013IfNeeded(ApplicationHost appHost, ILogger logger) private static async Task InstallVcredist2013IfNeeded(ApplicationHost appHost, ILogger logger)
{ {
// Reference // Reference