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