aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MediaBrowser.ServerApplication/MainStartup.cs90
1 files changed, 90 insertions, 0 deletions
diff --git a/MediaBrowser.ServerApplication/MainStartup.cs b/MediaBrowser.ServerApplication/MainStartup.cs
index 87acd652e..5f528926b 100644
--- a/MediaBrowser.ServerApplication/MainStartup.cs
+++ b/MediaBrowser.ServerApplication/MainStartup.cs
@@ -256,6 +256,9 @@ namespace MediaBrowser.ServerApplication
task = InstallVcredistIfNeeded(_appHost, _logger);
Task.WaitAll(task);
+ task = InstallFrameworkV46IfNeeded(_logger);
+ Task.WaitAll(task);
+
SystemEvents.SessionEnding += SystemEvents_SessionEnding;
SystemEvents.SessionSwitch += SystemEvents_SessionSwitch;
@@ -573,6 +576,93 @@ namespace MediaBrowser.ServerApplication
}
}
+ private static async Task InstallFrameworkV46IfNeeded(ILogger logger)
+ {
+ bool installFrameworkV46 = false;
+
+ try
+ {
+ using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32)
+ .OpenSubKey("SOFTWARE\\Microsoft\\NET Framework Setup\\NDP\\v4\\Full\\"))
+ {
+ if (ndpKey != null && ndpKey.GetValue("Release") != null)
+ {
+ if ((int)ndpKey.GetValue("Release") <= 393295)
+ {
+ //Found framework V4, but not yet V4.6
+ installFrameworkV46 = true;
+ }
+ }
+ else
+ {
+ //Nothing found in the registry for V4
+ installFrameworkV46 = true;
+ }
+ }
+ }
+ catch (Exception ex)
+ {
+ logger.ErrorException("Error getting .NET Framework version", ex);
+ }
+
+ _logger.Info(".NET Framework 4.6 found: {0}", !installFrameworkV46);
+
+ if (installFrameworkV46)
+ {
+ try
+ {
+ await InstallFrameworkV46().ConfigureAwait(false);
+ }
+ catch (Exception ex)
+ {
+ logger.ErrorException("Error installing .NET Framework version 4.6", ex);
+ }
+ }
+ }
+
+ private static async Task InstallFrameworkV46()
+ {
+ var httpClient = _appHost.HttpClient;
+
+ var tmp = await httpClient.GetTempFile(new HttpRequestOptions
+ {
+ Url = "https://github.com/MediaBrowser/Emby.Resources/raw/master/netframeworkV46/NDP46-KB3045560-Web.exe",
+ Progress = new Progress<double>()
+
+ }).ConfigureAwait(false);
+
+ var exePath = Path.ChangeExtension(tmp, ".exe");
+ File.Copy(tmp, exePath);
+
+ var startInfo = new ProcessStartInfo
+ {
+ FileName = exePath,
+
+ CreateNoWindow = true,
+ WindowStyle = ProcessWindowStyle.Hidden,
+ Verb = "runas",
+ ErrorDialog = false,
+ Arguments = "/q /norestart"
+ };
+
+
+ _logger.Info("Running {0}", startInfo.FileName);
+
+ using (var process = Process.Start(startInfo))
+ {
+ process.WaitForExit();
+ //process.ExitCode
+ /*
+ 0 --> Installation completed successfully.
+ 1602 --> The user canceled installation.
+ 1603 --> A fatal error occurred during installation.
+ 1641 --> A restart is required to complete the installation. This message indicates success.
+ 3010 --> A restart is required to complete the installation. This message indicates success.
+ 5100 --> The user's computer does not meet system requirements.
+ */
+ }
+ }
+
private static async Task InstallVcredistIfNeeded(ApplicationHost appHost, ILogger logger)
{
try