public static int Main(string[] args) { var assembly = Assembly.GetExecutingAssembly(); var version = assembly.GetName().Version; var buildArch = (Is64BitBuild ? 64 : 86); if (!IsLinux) { ServiceImpl.ServiceEarlyParseArguments(ref args); InitializeSystemConsole(); ServiceImpl.ServiceEarlyMain(args); } if (!IsServiceEnvironment) { WriteLine("{0} {1}.{2}.{3}-{4} {5:dd-MM-yyyy HH\\:mm\\:ss} [x{6}-built]", assembly.GetCustomAttribute <AssemblyProductAttribute>().Product, version.Major, version.Minor, version.Build, version.Revision, assembly.GetLinkerTime(), buildArch); WriteLine("{0}. Licensed under GPLv3.", assembly.GetCustomAttribute <AssemblyCopyrightAttribute>().Copyright); } if (!IsLinux && !ServiceImpl.ServiceMain(args)) { CloseParent(); return(0); } WriteLine("Running as {0}.", Environment.UserName); WriteLine(); var options = new[] { typeof(Benchmark.Options), typeof(Clone.Options), typeof(Compare.Options), typeof(DeepScan.Options), typeof(Erase.Options), typeof(ListDisks.Options), typeof(ListPartitions.Options), typeof(MakeDirectoryImage.Options), typeof(MakeImage.Options), typeof(MakeRaidImage.Options), typeof(MountImage.Options), typeof(MountPartition.Options), typeof(MountRaidImage.Options), typeof(PhysicalCheck.Options), typeof(Ramdisk.Options), typeof(Security.Options), typeof(Smart.Options), typeof(Sync.Options), }; var result = INVALID_ARGUMENT; var parserResult = Parser.Default.ParseArguments(args, options); if (parserResult is Parsed <object> parsed && parsed != null) { if (parsed.Value is Benchmark.Options) { result = Benchmark.Run((Benchmark.Options)parsed.Value); } else if (parsed.Value is Clone.Options) { result = Clone.Run((Clone.Options)parsed.Value); } else if (parsed.Value is Compare.Options) { result = Compare.Run((Compare.Options)parsed.Value); } else if (parsed.Value is DeepScan.Options) { result = DeepScan.Run((DeepScan.Options)parsed.Value); } else if (parsed.Value is Erase.Options) { result = Erase.Run((Erase.Options)parsed.Value); } else if (parsed.Value is ListDisks.Options) { result = ListDisks.Run((ListDisks.Options)parsed.Value); } else if (parsed.Value is ListPartitions.Options) { result = ListPartitions.Run((ListPartitions.Options)parsed.Value); } else if (parsed.Value is MakeDirectoryImage.Options) { result = MakeDirectoryImage.Run((MakeDirectoryImage.Options)parsed.Value); } else if (parsed.Value is MakeImage.Options) { result = MakeImage.Run((MakeImage.Options)parsed.Value); } else if (parsed.Value is MakeRaidImage.Options) { result = MakeRaidImage.Run((MakeRaidImage.Options)parsed.Value); } else if (parsed.Value is MountImage.Options) { result = MountImage.Run((MountImage.Options)parsed.Value); } else if (parsed.Value is MountPartition.Options) { result = MountPartition.Run((MountPartition.Options)parsed.Value); } else if (parsed.Value is MountRaidImage.Options) { result = MountRaidImage.Run((MountRaidImage.Options)parsed.Value); } else if (parsed.Value is Ramdisk.Options) { result = Ramdisk.Run((Ramdisk.Options)parsed.Value); } else if (parsed.Value is PhysicalCheck.Options) { result = PhysicalCheck.Run((PhysicalCheck.Options)parsed.Value); } else if (parsed.Value is Security.Options) { result = Security.Run((Security.Options)parsed.Value); } else if (parsed.Value is Smart.Options) { result = Smart.Run((Smart.Options)parsed.Value); } else if (parsed.Value is Sync.Options) { result = Sync.Run((Sync.Options)parsed.Value); } } if (!IsLinux) { CloseParent(); } return(result); }