Example #1
0
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            if (!Directory.Exists(".updates"))
            {
                Directory.CreateDirectory(".updates");
            }
            var finder    = new FrameworkFinder(Environment.Is64BitOperatingSystem);
            var resolver  = new DependencyResolver(finder);
            var framework = new Framework("Microsoft.WindowsDesktop.App", "5.0.0");
            var options   = new RuntimeOptions("net5.0", framework, RollForwardPolicy.Minor);
            var result    = resolver.Resolve(options);

            // Check if dependencies are missing.
            if (!result.Available)
            {
                if (MessageBox.Show(".NET 5.0 Desktop Runtime is not installed! Would you like to install it now?", "SA Tools Installer", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes)
                {
                    MessageBox.Show("SA Tools cannot be installed without .NET 5.", "SA Tools Installer", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
                FrameworkDownloader frameworkDownloader = new FrameworkDownloader(framework.NuGetVersion, framework.FrameworkName);
                string url = frameworkDownloader.GetDownloadUrlAsync(Environment.Is64BitOperatingSystem ? Architecture.Amd64 : Architecture.x86).GetAwaiter().GetResult();
                SAToolsHub.Updater.UpdaterWebClient client = new SAToolsHub.Updater.UpdaterWebClient();
                client.DownloadFile(url, "NET5Install.exe");
                Process.Start(new ProcessStartInfo("NET5Install.exe", "/install /passive /norestart")
                {
                    UseShellExecute = true, Verb = "runas"
                }).WaitForExit();
            }
            SAToolsHub.Updater.LoaderDownloadDialog mainForm = new SAToolsHub.Updater.LoaderDownloadDialog(Environment.Is64BitOperatingSystem ? "http://mm.reimuhakurei.net/SA%20Tools%20x64.7z" : "http://mm.reimuhakurei.net/SA%20Tools%20x86.7z", ".updates");
            Application.Run(mainForm);
        }
    /// <inheritdoc />
    public async Task <string[]> GetUrlsAsync()
    {
        if (Result.Available)
        {
            return new[] { "" }
        }
        ;

        var urls = new List <string>();

        foreach (var dependency in Result.MissingDependencies)
        {
            string url;

            try
            {
                var downloader = new FrameworkDownloader(dependency.NuGetVersion, dependency.FrameworkName);
                url = await downloader.GetDownloadUrlAsync(Architecture, Platform.Windows, Format.Executable, true);
            }
            catch (Exception) { url = ""; }

            urls.Add(url);
        }

        return(urls.ToArray());
    }
}
Example #3
0
    /// <summary>
    /// Gets all URLs to missing runtime files.
    /// </summary>
    /// <param name="reloadedFolderPath">Folder path for an application, library will check every runtimeconfig.json inside this folder.</param>
    public static async Task <HashSet <UrlCommandlinePair> > GetMissingRuntimeUrls(string reloadedFolderPath)
    {
        var allFiles = Directory.GetFiles(reloadedFolderPath, "*.*", SearchOption.AllDirectories);
        var filesWithRuntimeConfigs = allFiles.Where(x => x.EndsWith(".runtimeconfig.json")).ToArray();

        // Now that we have the runtime config files, get all missing deps from them.
        var urlSet = new HashSet <UrlCommandlinePair>();
        var dotNetCommandLineParams = new string[]
        {
            "/install",
            "/quiet",
            "/norestart"
        };

        foreach (var is64Bit in new[] { true, false })
        {
            var architecture = is64Bit ? Architecture.Amd64 : Architecture.x86;
            var finder       = new FrameworkFinder(is64Bit);
            var resolver     = new DependencyResolver(finder);
            foreach (var runtimeConfig in filesWithRuntimeConfigs)
            {
                var runtimeOptions = RuntimeOptions.FromFile(runtimeConfig);
                var result         = resolver.Resolve(runtimeOptions);;
                foreach (var missingDep in result.MissingDependencies)
                {
                    var frameworkDownloader = new FrameworkDownloader(runtimeOptions.GetAllFrameworks()[0].NuGetVersion, missingDep.FrameworkName);
                    urlSet.Add(new UrlCommandlinePair()
                    {
                        FriendlyName = $".NET Core {runtimeOptions.GetAllFrameworks()[0].Version} {architecture}",
                        Url          = await frameworkDownloader.GetDownloadUrlAsync(architecture),
                        Parameters   = dotNetCommandLineParams
                    });
                }
            }
        }

        // Also check for C++ Runtime.
        if (!RedistributablePackage.IsInstalled(RedistributablePackageVersion.VC2015to2019x64))
        {
            urlSet.Add(new UrlCommandlinePair()
            {
                FriendlyName = "Visual C++ Redist x64",
                Url          = "https://aka.ms/vs/17/release/vc_redist.x64.exe",
                Parameters   = dotNetCommandLineParams
            });
        }

        if (!RedistributablePackage.IsInstalled(RedistributablePackageVersion.VC2015to2019x86))
        {
            urlSet.Add(new UrlCommandlinePair()
            {
                FriendlyName = "Visual C++ Redist x86",
                Url          = "https://aka.ms/vs/17/release/vc_redist.x86.exe",
                Parameters   = dotNetCommandLineParams
            });
        }

        return(urlSet);
    }
Example #4
0
 private static async Task DownloadPackagedPlatformsAsync(string archivePath, string packsPath)
 {
     await FrameworkDownloader.Download(archivePath, packsPath);
 }