Ejemplo n.º 1
0
        /// <summary>
        /// Return codes:
        /// 0 - The operation completed successfully.
        /// 59 - An unexpected network error occurred.
        /// 1223 - The operation was canceled by the user.
        ///
        /// Commands
        /// u[ninstall] [/s[ilent]] AppID     - Uninstall an app
        /// i[nfo] AppID                      - Show info about an app
        /// l[ist]                            - List app ID's
        /// steam                             - Show Steam install location
        /// </summary>
        private static int Main(string[] args)
        {
            try
            {
                try { Console.OutputEncoding = Encoding.Unicode; }
                catch (IOException) { /*Old .NET v4 without support for unicode output*/ }

                ProcessCommandlineArguments(args);

                switch (_queryType)
                {
                case QueryType.GetInfo:
                    var appInfo = SteamApplicationInfo.FromAppId(_appId);
                    foreach (var property in typeof(SteamApplicationInfo).GetProperties(BindingFlags.Public | BindingFlags.Instance))
                    {
                        Console.WriteLine("{0} - {1}", property.Name, property.GetValue(appInfo, null) ?? "N/A");
                    }
                    break;

                case QueryType.Uninstall:
                    SteamUninstaller.UninstallSteamApp(SteamApplicationInfo.FromAppId(_appId), _silent);
                    break;

                case QueryType.List:
                    foreach (var result in SteamInstallation.Instance.SteamAppsLocations
                             .SelectMany(x => Directory.GetFiles(x, @"appmanifest_*.acf")
                                         .Select(p => Path.GetFileNameWithoutExtension(p).Substring(12)))
                             .Select(x => int.TryParse(x, out var num) ? num : (int?)null)
                             .Where(x => x != null)
                             .OrderBy(x => x))
                    {
                        Console.WriteLine(result);
                    }
                    break;

                case QueryType.SteamDir:
                    Console.WriteLine(SteamInstallation.Instance.InstallationDirectory);
                    break;
                }
            }
            catch (OperationCanceledException)
            {
                return((int)ReturnValue.CancelledByUserCode);
            }
            catch (FormatException ex)
            {
                LogWriter.WriteExceptionToLog(ex);
                return((int)ReturnValue.InvalidArgumentCode);
            }
            catch (Exception ex)
            {
                LogWriter.WriteExceptionToLog(ex);
                return((int)ReturnValue.UnexpectedNetworkErrorCode);
            }
            return((int)ReturnValue.OkCode);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Return codes:
        /// 0 - The operation completed successfully.
        /// 59 - An unexpected network error occurred.
        /// 1223 - The operation was canceled by the user.
        ///
        /// Commands
        /// u[ninstall] [/s[ilent]] AppID     - Uninstall an app
        /// i[nfo] AppID                      - Show info about an app
        /// l[ist]                            - List app ID's
        /// steam                             - Show Steam install location
        /// </summary>
        private static int Main(string[] args)
        {
            try
            {
                Console.OutputEncoding = Encoding.Unicode;

                ProcessCommandlineArguments(args);

                switch (_queryType)
                {
                case QueryType.GetInfo:
                    var appInfo = SteamApplicationInfo.FromAppId(_appId);
                    foreach (var property in typeof(SteamApplicationInfo).GetProperties(BindingFlags.Public | BindingFlags.Instance))
                    {
                        Console.WriteLine("{0} - {1}", property.Name, property.GetValue(appInfo, null) ?? "N/A");
                    }
                    break;

                case QueryType.Uninstall:
                    SteamUninstaller.UninstallSteamApp(SteamApplicationInfo.FromAppId(_appId), _silent);
                    break;

                case QueryType.List:
                    foreach (var result in SteamInstallation.Instance.SteamAppsLocations
                             .SelectMany(x => Directory.GetFiles(x, @"appmanifest_*.acf")
                                         .Select(p => (Path.GetFileNameWithoutExtension(p)?.Substring(12))).Where(p => p != null))
                             .Select(int.Parse).OrderBy(x => x))
                    {
                        Console.WriteLine(result);
                    }
                    break;

                case QueryType.SteamDir:
                    Console.WriteLine(SteamInstallation.Instance.InstallationDirectory);
                    break;
                }
            }
            catch (OperationCanceledException)
            {
                return(1223);
            }
            catch (FormatException ex)
            {
                Console.WriteLine("Error: {0}", ex.Message);
                return(InvalidArgumentCode);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}", ex.Message);
                return(59);
            }
            return(0);
        }
        public static SteamApplicationInfo FromAppId(int appId)
        {
            var steam = SteamInstallation.Instance;

            DirectoryInfo dir = null;
            var appIdStr = appId.ToString("G");

            var output = new SteamApplicationInfo(appId);

            foreach (var steamAppsLocation in steam.SteamAppsLocations)
            {
                var result = Directory.GetFiles(steamAppsLocation, @"appmanifest_*.acf")
                    .FirstOrDefault(x => appIdStr.Equals(Path.GetFileNameWithoutExtension(x)?.Substring(12), StringComparison.InvariantCulture));
                if (!string.IsNullOrEmpty(result))
                {
                    output.ManifestPath = result;
                    dir = new DirectoryInfo(steamAppsLocation);
                    break;
                }
            }

            if (dir == null)
                throw new ArgumentException("Could not find Steam App with the ID " + appIdStr);

            //"C:\Steam\steam.exe" steam://uninstall/123
            output.UninstallString = $"\"{steam.MainExecutableFilename}\" steam://uninstall/{appIdStr}";

            var manifestStrings = File.ReadAllLines(output.ManifestPath);
            output.Name = GetManifestValue(manifestStrings, "name");
            output.SizeOnDisk = GetManifestValue(manifestStrings, "SizeOnDisk");
            var installDirName = GetManifestValue(manifestStrings, "installdir");
            if (!string.IsNullOrEmpty(installDirName))
            {
                var path = Path.Combine(Path.Combine(dir.FullName, @"common"), installDirName);
                if (Directory.Exists(path))
                    output.InstallDirectory = path;

                if (output.Name == null)
                    output.Name = installDirName;
            }

            output.DownloadDirectory = dir.GetDirectories(@"downloading").SingleOrDefault()?.GetDirectories(appIdStr).SingleOrDefault()?.FullName;

            var workshopDir = dir.GetDirectories(@"workshop").SingleOrDefault();
            if (workshopDir != null)
            {
                output.WorkshopManifestPath = workshopDir.GetFiles($@"appworkshop_{appIdStr}.acf").SingleOrDefault()?.FullName;
                output.WorkshopDirectory = workshopDir.GetDirectories(@"content").SingleOrDefault()?.GetDirectories(appIdStr).SingleOrDefault()?.FullName;
            }

            return output;
        }
        public static void UninstallSteamApp(SteamApplicationInfo appInfo, bool silent)
        {
            Console.WriteLine("Uninstalling SteamApp with ID {0}{1}", appInfo.AppId, silent ? " silently" : string.Empty);

            if (silent)
            {
                QuietUninstall(appInfo);
            }
            else
            {
                LoudUninstall(appInfo);
            }
        }
        private static void QuietUninstall(SteamApplicationInfo appInfo)
        {
            //var steamPath = Misc.SeparateArgsFromCommand(appInfo.UninstallString).Key;
            //var processes = Process.GetProcesses().Where(x => x.MainModule.FileName.Equals(steamPath)).ToList();
            var processes = Process.GetProcessesByName("Steam");

            if (processes.Any())
            {
                Console.WriteLine("Killing Steam processes");
                foreach (var process in processes)
                {
                    process.Kill();
                    process.Dispose();
                }
            }

            if (Directory.Exists(appInfo.DownloadDirectory))
            {
                Console.WriteLine("Deleting " + appInfo.DownloadDirectory);
                Directory.Delete(appInfo.DownloadDirectory, true);
            }

            if (Directory.Exists(appInfo.WorkshopDirectory))
            {
                Console.WriteLine("Deleting " + appInfo.WorkshopDirectory);
                Directory.Delete(appInfo.WorkshopDirectory, true);
            }

            if (File.Exists(appInfo.WorkshopManifestPath))
            {
                Console.WriteLine("Deleting " + appInfo.WorkshopManifestPath);
                File.Delete(appInfo.WorkshopManifestPath);
            }

            if (Directory.Exists(appInfo.InstallDirectory))
            {
                Console.WriteLine("Deleting " + appInfo.InstallDirectory);
                Directory.Delete(appInfo.InstallDirectory, true);
            }

            if (File.Exists(appInfo.ManifestPath))
            {
                Console.WriteLine("Deleting " + appInfo.ManifestPath);
                File.Delete(appInfo.ManifestPath);
            }
        }
Ejemplo n.º 6
0
        private static void LoudUninstall(SteamApplicationInfo appInfo)
        {
            Console.WriteLine("Running " + appInfo.UninstallString);
            var uninstallCommand = Misc.SeparateArgsFromCommand(appInfo.UninstallString);

            Process.Start(uninstallCommand.Key, uninstallCommand.Value);

            Console.WriteLine();
            Console.WriteLine("To stop waiting for Steam and cancel the operation press any key.");

            while (File.Exists(appInfo.ManifestPath))
            {
                Thread.Sleep(400);
                if (Console.KeyAvailable)
                {
                    throw new OperationCanceledException();
                }
            }
        }