Пример #1
0
        private static void UpdateSysLinux(DirectoryInfo directoryInfo)
        {
            foreach (var file in directoryInfo.GetFiles("*", SearchOption.AllDirectories))
            {
                switch (file.Name)
                {
                case "chain.c32":
                    break;

                case "vesamenu.c32":
                    break;

                case "menu.c32":
                    break;

                case "libutil.c32":
                    break;

                case "libcom32.c32":
                    break;

                case "ifcpu64.c32":
                    break;

                default:
                    continue;
                }

                file.Delete();
                WpfUtilities.WriteResourceToFile(
                    new Uri($"pack://application:,,,/Resources/SysLinuxFiles/{file.Name}"), file.FullName);
            }
        }
Пример #2
0
        public MainViewModel()
        {
            var tempFolder = new DirectoryInfo(Path.Combine(Path.GetTempPath(), "5E6C58AD-D485-4904-8193-BC26FE41BB11"));

            tempFolder.Create();

            var filename = Path.Combine(tempFolder.FullName, "7z.dll");

            WpfUtilities.WriteResourceToFile(new Uri("pack://application:,,,/Resources/Utilities/7z.dll"),
                                             Path.Combine(tempFolder.FullName, filename));
            SevenZipExtractor.SetLibraryPath(filename);

            UsbStickSettings = new UsbStickSettings();
            _views           = new List <View>
            {
                new SelectDriveViewModel(UsbStickSettings),
                new SystemsViewModel(UsbStickSettings),
                new ModifyAppearanceViewModel(UsbStickSettings),
                new ApplicationsViewModel(UsbStickSettings)
            };
            CurrentView = _views[0];
            _views.ForEach(view => view.GoForwardChanged += (sender, args) => RefreshCanGoForward());
            RefreshCanGoForward();

            Application.Current.Exit += (sender, args) =>
            {
                _views.ForEach(x => x.Dispose());
                try
                {
                    tempFolder.Delete(true);
                }
                catch (Exception)
                {
                    // ignored
                }
            };
        }
Пример #3
0
        public void CreateBootStick(Logger logger)
        {
            var tempDirectory = FileSystemExtensions.MakeDirectoryUnique(Path.Combine(Path.GetTempPath(), "GodlikeStick"));

            logger.Status("Create temp directory");
            tempDirectory.Create();
            try
            {
                var targetDirectory = new DirectoryInfo(Path.Combine(_drive.RootDirectory.FullName, DriveDirectory));

                if (!targetDirectory.Exists)
                {
                    logger.Status($"Create /{DriveDirectory} directory on drive");
                    targetDirectory.Create();
                }

                if (!File.Exists(Path.Combine(targetDirectory.FullName, "libcom32.c32")))
                {
                    InstallSysLinux(_drive, tempDirectory, logger);
                }

                logger.Status("Write syslinux config");
                var sysLinuxFile = new FileInfo(Path.Combine(targetDirectory.FullName, "syslinux.cfg"));
                if (sysLinuxFile.Exists)
                {
                    SysLinuxConfigFile = SysLinuxConfigFile.OpenFile(sysLinuxFile.FullName, _sysLinuxAppearance);
                }
                else
                {
                    SysLinuxConfigFile = SysLinuxConfigFile.Create(sysLinuxFile.FullName, _sysLinuxAppearance);
                }

                logger.Status("Copy background.png");
                var backgroundFilePath = Path.Combine(targetDirectory.FullName, "background.png");
                if (!string.IsNullOrEmpty(_sysLinuxAppearance.ScreenBackground) &&
                    File.Exists(_sysLinuxAppearance.ScreenBackground))
                {
                    File.Copy(_sysLinuxAppearance.ScreenBackground, backgroundFilePath);
                }
                else if (!File.Exists(backgroundFilePath))
                {
                    //only copy if the file does not exist because the user could have already installed syslinux with a different background image
                    WpfUtilities.WriteResourceToFile(
                        new Uri("pack://application:,,,/Resources/SysLinuxFiles/background.png"), backgroundFilePath);
                }

                var randomFiles = new[]
                { "chain.c32", "libcom32.c32", "libutil.c32", "memdisk", "menu.c32", "vesamenu.c32", "grub.exe" };
                foreach (var randomFile in randomFiles)
                {
                    var resource =
                        Application.GetResourceStream(
                            new Uri($"pack://application:,,,/Resources/SysLinuxFiles/{randomFile}"));

                    if (resource == null)
                    {
                        throw new FileNotFoundException();
                    }

                    var targetFile = Path.Combine(targetDirectory.FullName, randomFile);
                    if (File.Exists(targetFile))
                    {
                        byte[] resourceHash;
                        byte[] fileHash;
                        using (var md5 = new MD5CryptoServiceProvider())
                        {
                            resourceHash = md5.ComputeHash(resource.Stream);
                            using (var fs = new FileStream(targetFile, FileMode.Open, FileAccess.Read))
                                fileHash = md5.ComputeHash(fs);
                        }

                        if (resourceHash.SequenceEqual(fileHash))
                        {
                            logger.Status($"{randomFile} already exists");
                            continue;
                        }
                    }

                    logger.Status($"Write \"{Path.Combine(targetDirectory.FullName, randomFile)}\"");
                    WpfUtilities.WriteResourceToFile(
                        new Uri($"pack://application:,,,/Resources/SysLinuxFiles/{randomFile}"),
                        Path.Combine(targetDirectory.FullName, randomFile));
                }
            }
            finally
            {
                logger.Status("Delete temp directory");
                tempDirectory.Delete(true);
            }
        }