Exemplo n.º 1
0
    /// <summary>
    /// Compresses old loader log files into a zip archive.
    /// </summary>
    private static void HandleLogsAndCrashdumps()
    {
        var loaderConfig = IoC.Get <LoaderConfig>();

        // Logs (delete & compress)
        using var logCompressor = new LogFileCompressor(Paths.ArchivedLogPath);
        logCompressor.AddFiles(Paths.LogPath, TimeSpan.FromHours(loaderConfig.LogFileCompressTimeHours));
        logCompressor.DeleteOldFiles(TimeSpan.FromHours(loaderConfig.LogFileDeleteHours));

        // Crashdumps (delete)
        var dumpFolders = Directory.GetDirectories(Paths.CrashDumpPath);
        var now         = DateTime.UtcNow;

        foreach (var folder in dumpFolders)
        {
            var timeElapsed = now - Directory.GetLastWriteTimeUtc(folder);
            if (timeElapsed.TotalHours > loaderConfig.CrashDumpDeleteHours)
            {
                IOEx.TryDeleteDirectory(folder);
            }
        }
    }
    public async Task InstallReloadedAsync(string?installFolder = null, bool createShortcut = true, bool startReloaded = true)
    {
        // Step
        installFolder ??= Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "Reloaded-II");
        Directory.CreateDirectory(installFolder);

        using var tempDownloadDir = new TemporaryFolderAllocation();
        var progressSlicer = new ProgressSlicer(new Progress <double>(d =>
        {
            Progress = d * 100.0;
        }));

        try
        {
            var downloadLocation = Path.Combine(tempDownloadDir.FolderPath, $"Reloaded-II.zip");

            // 0.15
            CurrentStepNo = 0;
            await DownloadReloadedAsync(downloadLocation, progressSlicer.Slice(0.15));

            if (CancellationToken.IsCancellationRequested)
            {
                throw new TaskCanceledException();
            }

            // 0.20
            CurrentStepNo = 1;
            await ExtractReloadedAsync(installFolder, downloadLocation, progressSlicer.Slice(0.05));

            if (CancellationToken.IsCancellationRequested)
            {
                throw new TaskCanceledException();
            }

            // 1.00
            CurrentStepNo = 2;
            await CheckAndInstallMissingRuntimesAsync(installFolder, tempDownloadDir.FolderPath,
                                                      progressSlicer.Slice(0.8),
                                                      s => { CurrentStepDescription = s; }, CancellationToken.Token);

            var executableName = IntPtr.Size == 8 ? "Reloaded-II.exe" : "Reloaded-II32.exe";
            var executablePath = Path.Combine(installFolder, executableName);
            var shortcutPath   = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "Reloaded-II.lnk");

            if (createShortcut)
            {
                CurrentStepDescription = "Creating Shortcut";
                MakeShortcut(shortcutPath, executablePath);
            }

            CurrentStepDescription = "All Set";

            if (startReloaded)
            {
                Process.Start(executablePath);
            }
        }
        catch (TaskCanceledException)
        {
            IOEx.TryDeleteDirectory(installFolder);
        }
        catch (Exception e)
        {
            IOEx.TryDeleteDirectory(installFolder);
            MessageBox.Show("There was an error in installing Reloaded.\n" +
                            $"Feel free to open an issue on github.com/Reloaded-Project/Reloaded-II if you require support.\n" +
                            $"Message: {e.Message}\n" +
                            $"Stack Trace: {e.StackTrace}", "Error in Installing Reloaded");
        }
    }