Building & Deploying¶
Build command¶
For explicit control over all options:
Output files¶
| File | Purpose |
|---|---|
YourPlugin.dll |
The native DLL — this is the file HydroSym loads |
YourPlugin.pdb |
Debug symbols — keep for crash analysis, do not ship to end users |
YourPlugin.exp, .lib |
Linker artifacts — not needed at runtime |
Only YourPlugin.dll needs to be deployed.
Build machine requirements
NativeAOT requires the Visual C++ build tools (MSVC) to be installed on the build machine. Install "Desktop development with C++" from the Visual Studio Installer, or use the standalone Build Tools package.
Deployment layout¶
Create a dedicated directory for each plugin:
C:\ProgramData\HydroSym\plugins\
└── AcmeErpPlugin\
├── AcmeErpPlugin.dll
└── acme.ini ← plugin config file (optional)
Keep each plugin in its own subdirectory to avoid DLL naming conflicts.
Configuring HydroSym¶
Edit the HydroSym INI file. The default location is:
Add a [Plugin] section:
[Plugin]
Type=DLL
Path=C:\ProgramData\HydroSym\plugins\AcmeErpPlugin\AcmeErpPlugin.dll
ConfigPath=C:\ProgramData\HydroSym\plugins\AcmeErpPlugin\acme.ini
| Key | Description |
|---|---|
Type |
DLL for in-process plugins, Process for out-of-process plugins |
Path |
Full path to the plugin DLL or executable |
ConfigPath |
Passed to your plugin's Initialize as request.ConfigPath |
HydroSym supports one plugin at a time. If you need multiple integrations in a single plugin, implement all capabilities in one DLL.
Plugin config file¶
Your plugin reads its config from request.ConfigPath in Initialize. Use a simple INI or JSON format. Example acme.ini:
[Database]
Server=sql-erp-prod.acme.local
Database=AcmeERP
IntegratedSecurity=true
[Options]
AutoCheckIn=true
DefaultCurrency=EUR
Read it in Initialize:
public override void Initialize(InitializeRequest request)
{
var config = new IniFile(request.ConfigPath);
_connectionString =
$"Server={config["Database", "Server"]};" +
$"Database={config["Database", "Database"]};" +
"Integrated Security=true;";
}
Deployment via scripts or group policy¶
For multi-machine deployments:
# deploy.ps1
$dest = "C:\ProgramData\HydroSym\plugins\AcmeErpPlugin"
New-Item -ItemType Directory -Force -Path $dest
Copy-Item ".\publish\AcmeErpPlugin.dll" -Destination $dest -Force
# Patch the INI (requires ini-editing module or simple string replacement)
Distribute via: - Group Policy — deploy the script as a Computer Startup Script. - SCCM / Intune — package as an application with the deploy script as the installer. - Shared network share — for small teams, reference the DLL directly from a UNC path in the INI.
Troubleshooting¶
Plugin menu does not appear
- Check
%APPDATA%\HydroSym\hydrosym.logfor a load error. - Verify the
Pathin the INI points to the exact file (no typos, correct drive letter). - Run
Dependency Walkerordumpbin /exports AcmeErpPlugin.dlland verifyHydroSymPlugin_Invokeis exported.
HydroSymPlugin_Invoke not found
The DLL was not compiled with NativeAOT, or the entry point attribute is missing. Ensure your plugin class inherits HydroSymPluginBase and the SDK is correctly referenced.
Access violation on startup
A crash in GetInfo or Initialize. Attach the Visual Studio debugger to HydroSym.exe before it loads the plugin, or check EurekaLog / crash dumps.
GetComponentParameters returns NOT_SUPPORTED
The capability is not listed in GetInfo.Capabilities. Add "getComponentParameters" to the capabilities array.