koskit.SteamCmdFluentApi

SteamCmdFluentApi is a wrapper library for SteamCMD.exe 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. You can find out more in the github repository: github.com/koskit/SteamCmdFluentApi


Keywords
steamcmd, steamcmdfluentapi, fluent, api, steam
License
MIT
Install
Install-Package koskit.SteamCmdFluentApi -Version 1.0.5

Documentation

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.

License

MIT