Repository navigation
02 getting started
- OS: Windows 10 / 11, x64 or ARM64
- Runtime: .NET 10.0 Desktop Runtime
-
Bundled executables (shipped with the app, must stay next to
BatchConvertToCHD.exe):-
CHDSharp.exe/CHDSharp_arm64.exe— primary encoder (chdman byte-identical output) -
chdman.exe/chdman_arm64.exe(0.289) — MAME CHD tool (conversion fallback, and extraction fallback) -
7za.exe/7za_arm64.exe— 7-Zip fallback extractor
-
-
Nothing else to install — CSO, ISZ, ECM, Alcohol
.mds/.mdfand split volume sets are all handled inside the application, so x64 and ARM64 get the same feature set.
- .NET SDK 10.0.x (
global.jsonpins10.0.0withrollForward: latestMajor) - Windows SDK for WPF development
- No other global tools required
- Download the latest binary from the Releases page.
- Extract the contents to a permanent folder (do not run from a temp/Downloads folder if you want update/self-containment to behave).
-
Important: keep all
.exefiles (including ARM64 variants) in the same directory asBatchConvertToCHD.exe—chdman.exeand7za.exeare located relative to the app's base directory (MainWindow.xaml.cs:96–101). - Launch
BatchConvertToCHD.exe.
# Clone
git clone https://github.com/purelogiccode/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 ReleaseThe 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.exeand7za.exeare copied to the output directory by the build (BatchConvertToCHD.csproj:26–40). The libraries are referenced as project references, not NuGet packages, exceptCHDSharp(NuGet 1.4.3) and other packages listed below.
| Package | Version | Purpose |
|---|---|---|
| CHDSharp | 1.4.3 | Pure C# CHD reading, verification, extraction, and creation (chdman byte-identical output) |
| 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 | 3.0.1 | 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) |
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).
- The app checks the bundled encoders: it warns when
CHDSharp.exe— the primary encoder — is missing, and only refuses a batch when neitherCHDSharp.exenorchdman.exeis present (status bar indicators + a message box). - Usage statistics are recorded once (anonymous
{ applicationId, version }POST — see Services Reference). - An update check against GitHub releases runs in the background.
- Leftover temp directories from crashed sessions and legacy files are cleaned up after a short delay.
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).
- Open the Convert to CHD tab.
- Source Files → browse to your folder of images/archives.
- Output CHD → browse to your target folder.
- 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).
Start here
Using the app
How it works
Reference