ErikssonBeamLauncher

ErikssonBeamLauncher

Launch and manage fresh Eriksson Beam instances programmatically.

When to Use

  • Starting automation from scratch
  • Need a guaranteed clean state
  • Processing specific files without user interaction
  • Want automatic cleanup when done

Basic Usage

var args = new ErikssonBeamLauncherArgs
{
    LicenseKey = Environment.GetEnvironmentVariable("ERIKSSON_LICENSE_KEY"),
    ExecutablePath = @"C:\Program Files\Eriksson Software\Eriksson Beam\ErikssonBeam.exe",
    FilesToOpen = new[] { @"C:\Projects\beam1.ebf", @"C:\Projects\beam2.ebf" },
    CloseErikssonBeamOnClientDisconnect = true,
    IdleTimeoutMs = 30000
};

using var launcher = await ErikssonBeamLauncher.LaunchErikssonBeam(args);
var client = launcher.Client;

// Work with the client
var design = await client.PullBeamDesignerAsync("beam1");
design.DesignCriteria.ProjectInformation.DesignerName = "Updated";
await client.PushBeamDesignerAsync("beam1", design);

// Eriksson Beam closes automatically when launcher is disposed

Configuration Options

ErikssonBeamLauncherArgs

PropertyTypeDefaultDescription
LicenseKeystring""Required. API authorization key
ExecutablePathstring""Required. Full path to ErikssonBeam.exe
FilesToOpenstring[][]Files to open on launch
CloseErikssonBeamOnClientDisconnectbooltrueClose Eriksson Beam when launcher is disposed
IdleTimeoutMsint30000Client connection timeout (ms)
MaxAttemptsint10Connection retry attempts
WaitTimeBetweenAttemptsMsint1000Delay between retries (ms)

Opening Files on Launch

You can open multiple files when launching:

var args = new ErikssonBeamLauncherArgs
{
    // ...
    FilesToOpen = new[]
    {
        @"C:\Projects\beam1.ebf",
        @"C:\Projects\beam2.ebf",
        @"C:\Projects\beam3.ebf"
    }
};

Each file must exist. If a file is not found, the launch will fail.

Disposal Behavior

The launcher manages the Eriksson Beam process lifecycle:

With CloseErikssonBeamOnClientDisconnect = true (Default)

using var launcher = await ErikssonBeamLauncher.LaunchErikssonBeam(args);
// Work with client...
// When using block ends:
// 1. Client connection is closed
// 2. Eriksson Beam process terminates

With CloseErikssonBeamOnClientDisconnect = false

args.CloseErikssonBeamOnClientDisconnect = false;
using var launcher = await ErikssonBeamLauncher.LaunchErikssonBeam(args);
// Work with client...
// When using block ends:
// 1. Client connection is closed
// 2. Eriksson Beam remains open for manual use

Error Handling

try
{
    using var launcher = await ErikssonBeamLauncher.LaunchErikssonBeam(args);
    var client = launcher.Client;
    // ...
}
catch (FileNotFoundException ex)
{
    // ExecutablePath or FilesToOpen not found
    Console.WriteLine($"File not found: {ex.FileName}");
}
catch (DirectoryNotFoundException ex)
{
    // Directory in ExecutablePath doesn't exist
    Console.WriteLine($"Directory not found: {ex.Message}");
}
catch (ErikssonBeamNotRunningException ex)
{
    // Process failed to start or connection failed
    Console.WriteLine($"Launch failed: {ex.Message}");
}

Logging

Pass an ILogger for diagnostic output:

using Microsoft.Extensions.Logging;

// Create logger (example using console)
using var loggerFactory = LoggerFactory.Create(builder =>
{
    builder.AddConsole().SetMinimumLevel(LogLevel.Debug);
});
var logger = loggerFactory.CreateLogger<Program>();

var launcher = await ErikssonBeamLauncher.LaunchErikssonBeam(args, logger);

Complete Example

using System;
using System.Threading.Tasks;
using ErikssonBeam.API.BeamClient;
using Microsoft.Extensions.Logging;

class BatchProcessor
{
    static async Task ProcessFiles(string[] files)
    {
        var args = new ErikssonBeamLauncherArgs
        {
            LicenseKey = Environment.GetEnvironmentVariable("ERIKSSON_LICENSE_KEY"),
            ExecutablePath = @"C:\Program Files\Eriksson Software\Eriksson Beam\ErikssonBeam.exe",
            FilesToOpen = files,
            CloseErikssonBeamOnClientDisconnect = true,
            IdleTimeoutMs = 60000  // 1 minute for longer operations
        };

        try
        {
            using var launcher = await ErikssonBeamLauncher.LaunchErikssonBeam(args);
            var client = launcher.Client;

            foreach (var file in files)
            {
                var fileName = System.IO.Path.GetFileNameWithoutExtension(file);
                Console.WriteLine($"Processing {fileName}...");

                var design = await client.PullBeamDesignerAsync(fileName);

                // Modify design
                design.DesignCriteria.ProjectInformation.Date = DateTime.Now;

                await client.PushBeamDesignerAsync(fileName, design);

                // Save the file
                await client.SaveProject(fileName, file, overwriteExistingFile: true);
            }

            Console.WriteLine("All files processed successfully!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}

See Also