diff options
| author | Luke <luke.pulverenti@gmail.com> | 2016-09-15 22:43:46 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-09-15 22:43:46 -0400 |
| commit | 191259893646ba9afc5af89685ec4e8f26648cbd (patch) | |
| tree | 11f24aa5b41cc82bac2c945a67bc8e5ca1854dd6 /MediaBrowser.ServerApplication | |
| parent | a741e5000930899424bae79c4ac7737f41dacf24 (diff) | |
| parent | 7177512a4551201d721a64ebc8f1fbe15266b6de (diff) | |
Merge pull request #2174 from MediaBrowser/dev
Dev
Diffstat (limited to 'MediaBrowser.ServerApplication')
| -rw-r--r-- | MediaBrowser.ServerApplication/MainStartup.cs | 71 |
1 files changed, 68 insertions, 3 deletions
diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs index 5d4fba32d6..90e6887333 100644 --- a/MediaBrowser.ServerApplication/MainStartup.cs +++ b/MediaBrowser.ServerApplication/MainStartup.cs @@ -33,6 +33,7 @@ namespace MediaBrowser.ServerApplication private static ILogger _logger; private static bool _isRunningAsService = false; + private static bool _canRestartService = false; private static bool _appHostDisposed; [DllImport("kernel32.dll", SetLastError = true)] @@ -68,6 +69,11 @@ namespace MediaBrowser.ServerApplication var options = new StartupOptions(); _isRunningAsService = options.ContainsOption("-service"); + if (_isRunningAsService) + { + _canRestartService = CanRestartWindowsService(); + } + var currentProcess = Process.GetCurrentProcess(); var applicationPath = currentProcess.MainModule.FileName; @@ -261,7 +267,14 @@ namespace MediaBrowser.ServerApplication { get { - return !_isRunningAsService; + if (_isRunningAsService) + { + return _canRestartService; + } + else + { + return true; + } } } @@ -273,7 +286,14 @@ namespace MediaBrowser.ServerApplication { get { - return !_isRunningAsService; + if (_isRunningAsService) + { + return _canRestartService; + } + else + { + return true; + } } } @@ -614,7 +634,11 @@ namespace MediaBrowser.ServerApplication { DisposeAppHost(); - if (!_isRunningAsService) + if (_isRunningAsService) + { + RestartWindowsService(); + } + else { //_logger.Info("Hiding server notify icon"); //_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) { // Reference |
