SteamCmdFluentApi
SteamCmdFluentApi is a wrapper library for SteamCMD.exe (executable can be found here).
You can download the nuget package from here
Provides some easy access to the functionality of the executable through C# with a command builder, and manages the running process (when executing any command) while also returning any output of the program.
Fluent API Usage
Everything in a single command:
public static void Main(string[] args)
{
string steamCmdExecutablePath = @"C:\steamcmd\steamcmd.exe";
int valheimAppId = 896660;
string serverInstallDirectory = @"E:\valheimServer";
bool success = SteamCmd.WithExecutable(steamCmdExecutablePath)
.CreateCommand()
.WithAnonymousAuthentication()
.InstallOrUpdateApp(valheimAppId)
.WithWorkingDirectory(serverInstallDirectory)
.BuildAndTryToExecute(out string output);
if (success)
Console.WriteLine($"Successfully installed server. Output: \r\n {output}");
else
Console.WriteLine($"Error while installing server. Output: \r\n {output}");
}
You can create a new instace of SteamCmd
class for multiple uses.
public static void Main(string[] args)
{
SteamCmd steam = new SteamCmd(@"C:\steamcmd\steamcmd.exe");
//Create valheim server.
bool valheimInstallResult =
steam.CreateCommand()
.WithAnonymousAuthentication()
.InstallOrUpdateApp(896660)
.WithWorkingDirectory(@"E:\valheimServer")
.BuildAndTryToExecute(out string valheimOutput);
if (valheimInstallResult)
Console.WriteLine($"Successfully installed valheim server. Output: \r\n {valheimOutput}");
else
Console.WriteLine($"Error while installing valheim server. Output: \r\n {valheimOutput}");
//Create csgo server.
bool csgoInstallResult =
steam.CreateCommand()
.WithAnonymousAuthentication()
.InstallOrUpdateApp(740)
.WithWorkingDirectory(@"E:\csgoServer")
.BuildAndTryToExecute(out string csgoOutput);
if (csgoInstallResult)
Console.WriteLine($"Successfully installed csgo server. Output: \r\n {csgoOutput}");
else
Console.WriteLine($"Error while installing csgo server. Output: \r\n {csgoOutput}");
}
You can create a command and (re)use it at a later time (e.g. in scheduled updates):
public static void Main(string[] args)
{
SteamCmd steam = new SteamCmd(@"C:\steamcmd\steamcmd.exe");
int valheimAppId = 896660;
string valheimServerInstallDirectory = @"E:\valheimServer";
SteamCmdCommand installOrUpdateValheimServerCommand =
steam.CreateCommand()
.WithAnonymousAuthentication()
.InstallOrUpdateApp(valheimAppId)
.WithDirectory(valheimServerInstallDirectory)
.Build();
//Do something else or use the command in another class at a later time...
bool success = steam.TryToExecuteCommand(installOrUpdateValheimServerCommand, out string output);
if (success)
Console.WriteLine($"Successfully installed valheim server. Output: \r\n {output}");
else
Console.WriteLine($"Error while installing valheim server. Output: \r\n {output}");
}
Or, you can even use the SteamCmd class entirely as a wrapper and execute your command without the builder feature:
public static void Main(string[] args)
{
SteamCmd steam = new SteamCmd(@"C:\steamcmd\steamcmd.exe");
string command = @"+login anonymous +force_install_dir E:\valheimServer\ +app_update {896660} +quit";
bool success = steam.TryToExecuteCommand(command, out string output);
if (success)
Console.WriteLine($"Successfully installed valheim server. Output: \r\n {output}");
else
Console.WriteLine($"Error while installing valheim server. Output: \r\n {output}");
}
Contributing
Pull requests are welcome. The project is in pre-alpha (literally anything might not work), still in development. I use the code in some other of my projects and test it there. Any help is welcome.