Skip to the content.

2. Getting Started

2.1 Requirements

Runtime (end users)

Build (developers)


2.2 Installation (End Users)

  1. Download the latest binary from the Releases page.
  2. Extract the contents to a permanent folder (do not run from a temp/Downloads folder if you want update/self-containment to behave).
  3. Important: keep all .exe files (including ARM64 variants) in the same directory as BatchConvertToCHD.exechdman.exe and 7za.exe are located relative to the app’s base directory (MainWindow.xaml.cs:96–101).
  4. Launch BatchConvertToCHD.exe.

2.3 Building from Source

# Clone
git clone https://github.com/drpetersonfernandes/BatchConvertToCHD.git
cd CSharp_BatchConvertToCHD

# Build the whole solution
dotnet build CSharp_BatchConvertToCHD.sln -c Release

# Run the tests
dotnet test CSharp_BatchConvertToCHD.sln -c Release

# Or just the application
dotnet build BatchConvertToCHD/BatchConvertToCHD.csproj -c Release

The solution contains five projects:

Project Kind Target framework
BatchConvertToCHD WPF application (WinExe) net10.0-windows
BatchConvertToCHD.Tests xUnit test suite net10.0-windows
CCDSharp class library (CloneCD parsing) net10.0;net8.0
CSOSharp class library (CSO decompression) net10.0;net8.0
PBPSharp class library (PBP/SFO parsing) net10.0;net8.0

Note: chdman.exe and 7za.exe are copied to the output directory by the build (BatchConvertToCHD.csproj:26–40). The libraries are referenced as project references, not NuGet packages, except CHDSharp (NuGet 1.2.0) and other packages listed below.

NuGet dependencies (application)

Package Version Purpose
CHDSharp 1.2.0 Pure C# CHD reading, verification, extraction
WPF-UI 4.3.0 Fluent Design theming and controls
SharpCompress 0.50.x Archive extraction (7z/rar), and bzip2 decompression for ISZ chunks
NAudio 2.3.0 MP3 decoding via Media Foundation
Serilog 4.4.0 Structured logging
Serilog.Sinks.File 7.0.0 Rolling file logs
Serilog.Sinks.Debug 3.0.0 Debugger sink
Meziantou.Analyzer 3.0.x Roslyn analyzers (build-time only)

2.4 Running the Application

From the command line

The application accepts an optional folder path argument to pre-populate the Convert to CHD source folder:

BatchConvertToCHD.exe "C:\ROMs\MyGames"

The path is applied in MainWindow_LoadedAsync via SetInputFolder (MainWindow.xaml.cs:148–153).

First launch

  1. The app verifies that chdman.exe is present and shows a warning if not (status bar indicator “Dependencies: CHDMAN” + a message box).
  2. Usage statistics are recorded once (anonymous { applicationId, version } POST — see Services Reference).
  3. An update check against GitHub releases runs in the background.
  4. Leftover temp directories from crashed sessions and legacy files are cleaned up after a short delay.

Single-instance behavior

Only one instance can run: a global mutex Global\BatchConvertToCHD_SingleInstance is acquired at startup; a second launch shows “Another instance of BatchConvertToCHD is already running.” and exits (App.xaml.cs:80–105).


2.5 First Conversion in 30 Seconds

  1. Open the Convert to CHD tab.
  2. Source Files → browse to your folder of images/archives.
  3. Output CHD → browse to your target folder.
  4. Click Start Conversion.

Files appear in the list pre-selected; uncheck any you want to skip. The log pane shows live chdman output; the status bar and stat cards show progress, speed, and elapsed time.

See the User Guide for all options and the other two workflows (extraction and verification).