mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-05-29 11:58:27 +01:00
3.2.30.12
This commit is contained in:
@@ -39,7 +39,6 @@ namespace MediaBrowser.ServerApplication
|
||||
private static ILogger _logger;
|
||||
|
||||
public static bool IsRunningAsService = false;
|
||||
private static bool _canRestartService = false;
|
||||
|
||||
[DllImport("kernel32.dll", SetLastError = true)]
|
||||
static extern bool SetDllDirectory(string lpPathName);
|
||||
@@ -58,11 +57,6 @@ namespace MediaBrowser.ServerApplication
|
||||
var options = new StartupOptions(Environment.GetCommandLineArgs());
|
||||
IsRunningAsService = options.ContainsOption("-service");
|
||||
|
||||
if (IsRunningAsService)
|
||||
{
|
||||
//_canRestartService = CanRestartWindowsService();
|
||||
}
|
||||
|
||||
var currentProcess = Process.GetCurrentProcess();
|
||||
|
||||
ApplicationPath = currentProcess.MainModule.FileName;
|
||||
@@ -86,22 +80,6 @@ namespace MediaBrowser.ServerApplication
|
||||
|
||||
ApplicationHost.LogEnvironmentInfo(logger, appPaths, true);
|
||||
|
||||
// Install directly
|
||||
if (options.ContainsOption("-installservice"))
|
||||
{
|
||||
logger.Info("Performing service installation");
|
||||
InstallService(ApplicationPath, logger);
|
||||
return;
|
||||
}
|
||||
|
||||
// Restart with admin rights, then install
|
||||
if (options.ContainsOption("-installserviceasadmin"))
|
||||
{
|
||||
logger.Info("Performing service installation");
|
||||
RunServiceInstallation(ApplicationPath);
|
||||
return;
|
||||
}
|
||||
|
||||
// Uninstall directly
|
||||
if (options.ContainsOption("-uninstallservice"))
|
||||
{
|
||||
@@ -120,8 +98,6 @@ namespace MediaBrowser.ServerApplication
|
||||
|
||||
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
|
||||
|
||||
RunServiceInstallationIfNeeded(ApplicationPath);
|
||||
|
||||
if (IsAlreadyRunning(ApplicationPath, currentProcess))
|
||||
{
|
||||
logger.Info("Shutting down because another instance of Emby Server is already running.");
|
||||
@@ -156,6 +132,14 @@ namespace MediaBrowser.ServerApplication
|
||||
return new Tuple<string, string>(processModulePath, Environment.CommandLine);
|
||||
}
|
||||
|
||||
private static bool IsServiceInstalled()
|
||||
{
|
||||
var serviceName = BackgroundService.GetExistingServiceName();
|
||||
var ctl = ServiceController.GetServices().FirstOrDefault(s => s.ServiceName == serviceName);
|
||||
|
||||
return ctl != null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether [is already running] [the specified current process].
|
||||
/// </summary>
|
||||
@@ -261,7 +245,7 @@ namespace MediaBrowser.ServerApplication
|
||||
|
||||
var resourcesPath = Path.GetDirectoryName(applicationPath);
|
||||
|
||||
if (runAsService)
|
||||
if (runAsService && IsServiceInstalled())
|
||||
{
|
||||
var systemPath = Path.GetDirectoryName(applicationPath);
|
||||
|
||||
@@ -283,7 +267,7 @@ namespace MediaBrowser.ServerApplication
|
||||
{
|
||||
if (IsRunningAsService)
|
||||
{
|
||||
return _canRestartService;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -306,7 +290,7 @@ namespace MediaBrowser.ServerApplication
|
||||
|
||||
if (IsRunningAsService)
|
||||
{
|
||||
return _canRestartService;
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -370,7 +354,7 @@ namespace MediaBrowser.ServerApplication
|
||||
|
||||
task = task.ContinueWith(new Action<Task>(a => appHost.RunStartupTasks()), TaskContinuationOptions.OnlyOnRanToCompletion | TaskContinuationOptions.AttachedToParent);
|
||||
|
||||
if (runService)
|
||||
if (runService && IsServiceInstalled())
|
||||
{
|
||||
StartService(logManager);
|
||||
}
|
||||
@@ -447,37 +431,9 @@ namespace MediaBrowser.ServerApplication
|
||||
{
|
||||
var service = new BackgroundService(logManager.GetLogger("Service"));
|
||||
|
||||
service.Disposed += service_Disposed;
|
||||
|
||||
ServiceBase.Run(service);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Handles the Disposed event of the service control.
|
||||
/// </summary>
|
||||
/// <param name="sender">The source of the event.</param>
|
||||
/// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
|
||||
static void service_Disposed(object sender, EventArgs e)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Installs the service.
|
||||
/// </summary>
|
||||
private static void InstallService(string applicationPath, ILogger logger)
|
||||
{
|
||||
try
|
||||
{
|
||||
ManagedInstallerClass.InstallHelper(new[] { applicationPath });
|
||||
|
||||
logger.Info("Service installation succeeded");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
logger.ErrorException("Uninstall failed", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Uninstalls the service.
|
||||
/// </summary>
|
||||
@@ -495,40 +451,6 @@ namespace MediaBrowser.ServerApplication
|
||||
}
|
||||
}
|
||||
|
||||
private static void RunServiceInstallationIfNeeded(string applicationPath)
|
||||
{
|
||||
var serviceName = BackgroundService.GetExistingServiceName();
|
||||
var ctl = ServiceController.GetServices().FirstOrDefault(s => s.ServiceName == serviceName);
|
||||
|
||||
if (ctl == null)
|
||||
{
|
||||
RunServiceInstallation(applicationPath);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Runs the service installation.
|
||||
/// </summary>
|
||||
private static void RunServiceInstallation(string applicationPath)
|
||||
{
|
||||
var startInfo = new ProcessStartInfo
|
||||
{
|
||||
FileName = applicationPath,
|
||||
|
||||
Arguments = "-installservice",
|
||||
|
||||
CreateNoWindow = true,
|
||||
WindowStyle = ProcessWindowStyle.Hidden,
|
||||
Verb = "runas",
|
||||
ErrorDialog = false
|
||||
};
|
||||
|
||||
using (var process = Process.Start(startInfo))
|
||||
{
|
||||
process.WaitForExit();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Runs the service uninstallation.
|
||||
/// </summary>
|
||||
@@ -616,7 +538,7 @@ namespace MediaBrowser.ServerApplication
|
||||
|
||||
public static void Shutdown()
|
||||
{
|
||||
if (IsRunningAsService)
|
||||
if (IsRunningAsService && IsServiceInstalled())
|
||||
{
|
||||
ShutdownWindowsService();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user