/// <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); }
/// <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); } }
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(); } } }