-
Notifications
You must be signed in to change notification settings - Fork 4
plugin sdk deployment
This guide describes how to deploy plugins (custom roles) and workspace modules (client-side extensions) in Genetec Security Center.
For Security Center to load your custom plugin or workspace module, it needs to know:
- Where to find the DLL files
- Whether it's a server-side plugin, client-side workspace module, or both
Security Center supports two registration methods:
- Windows Registry (5.12 and earlier, but also supported in 5.13+ for backward compatibility)
- XML Configuration Files (5.13+ only)
Before diving into registration methods, it's important to understand what you're deploying:
Plugin (Server-side):
- Custom server-side role that performs background tasks, integrations, or logic execution
- Requires a
ServerModuleDLL - Optionally includes a
ClientModuleDLL for configuration in Config Tool
Workspace Module (Client-side):
- Purely client-side extension with no backend logic
- Runs only inside Security Desk or Config Tool
- Requires a
ClientModuleDLL
Combined Plugin:
- Single DLL that contains both server and client logic
- Uses the same DLL path for both
ServerModuleandClientModule - Simplifies deployment but requires the DLL to contain both types of logic
Method 1: Windows Registry Registration (5.12 and older versions, 5.13+ with automatic migration to XML configuration file)
The Windows Registry method has been the standard approach since the beginning and continues to work in all Security Center versions, including 5.13+.
Plugin information is stored in the Windows Registry under:
Primary location (64-bit):
HKEY_LOCAL_MACHINE\SOFTWARE\Genetec\Security Center\Plugins\
Compatibility location (32-bit):
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Genetec\Security Center\Plugins\
Each plugin gets its own subkey under these locations.
| Name | Type | Required | Description |
|---|---|---|---|
Enabled |
REG_SZ |
Yes | Must be "True" to enable loading |
ServerModule |
REG_SZ |
For plugins | Full absolute path to the server DLL |
ClientModule |
REG_SZ |
For workspace modules | Full absolute path to the client DLL |
Client |
REG_SZ |
For .NET 8 plugins | Full absolute path to the .NET Framework Client assembly for plugin discovery |
AddFoldersToAssemblyProbe |
REG_SZ or REG_DWORD
|
Optional | Set to "True" if DLL has dependencies in same folder |
NetCore |
REG_SZ or REG_DWORD
|
Optional | Set to "True" for .NET 8 plugins (5.12.2+) |
Basic Plugin Example:
Key: HKEY_LOCAL_MACHINE\SOFTWARE\Genetec\Security Center\Plugins\MyPlugin
Values:
Enabled = True
ServerModule = C:\Program Files\Genetec\Plugins\MyPlugin\MyPlugin.dll
AddFoldersToAssemblyProbe = True
Workspace Module Example:
Key: HKEY_LOCAL_MACHINE\SOFTWARE\Genetec\Security Center\Plugins\MyWorkspaceModule
Values:
Enabled = True
ClientModule = C:\Program Files\Genetec\Plugins\MyModule\MyModule.dll
AddFoldersToAssemblyProbe = True
Combined Plugin (Single DLL):
Key: HKEY_LOCAL_MACHINE\SOFTWARE\Genetec\Security Center\Plugins\MyUnifiedPlugin
Values:
Enabled = True
ServerModule = C:\Program Files\Genetec\Plugins\MyPlugin\MyPlugin.dll
ClientModule = C:\Program Files\Genetec\Plugins\MyPlugin\MyPlugin.dll
AddFoldersToAssemblyProbe = True
Modern .NET 8 Plugin: (5.12.2+ only)
Key: HKEY_LOCAL_MACHINE\SOFTWARE\Genetec\Security Center\Plugins\MyModernPlugin
Values:
Enabled = True
ServerModule = C:\Program Files\Genetec\Plugins\MyPlugin\MyPlugin.Server.dll
Client = C:\Program Files\Genetec\Plugins\MyPlugin\MyPlugin.Client.dll
NetCore = True
AddFoldersToAssemblyProbe = True
Starting with Security Center 5.13, you can register plugins using XML configuration files instead of the Windows Registry. This method offers several advantages:
- No administrative access required for registry modification
- Cross-platform compatibility - works on Linux systems
- File monitoring - Security Center automatically detects changes
The directory location depends on your Security Center version:
| Version | Directory |
|---|---|
| 5.13.0 to 5.13.2 | C:\ProgramData\Genetec Security Center\PluginInstallations\Plugins\ |
| 5.13.3 and later | C:\Program Files (x86)\Common Files\Genetec System\PluginInstallations\Plugins\ |
- Each file must end with
.Plugin.xml - The prefix is arbitrary and doesn't affect plugin identity
- Examples:
MyPlugin.Plugin.xml,CustomReport.Plugin.xml
All plugins and workspace modules use the same XML structure:
<PluginInstallation>
<Version>1</Version>
<Configuration>
<Item Key="Enabled" Value="True" />
<Item Key="ServerModule" Value="C:\Path\To\Server.dll" />
<Item Key="ClientModule" Value="C:\Path\To\Client.dll" />
<Item Key="Client" Value="C:\Path\To\ClientAssembly.dll" />
<Item Key="AddFoldersToAssemblyProbe" Value="True" />
<Item Key="NetCore" Value="True" />
</Configuration>
</PluginInstallation>Basic Plugin:
<PluginInstallation>
<Version>1</Version>
<Configuration>
<Item Key="Enabled" Value="True" />
<Item Key="ServerModule" Value="C:\Program Files\Genetec\Plugins\MyPlugin\MyPlugin.dll" />
<Item Key="AddFoldersToAssemblyProbe" Value="True" />
</Configuration>
</PluginInstallation>Workspace Module:
<PluginInstallation>
<Version>1</Version>
<Configuration>
<Item Key="Enabled" Value="True" />
<Item Key="ClientModule" Value="C:\Program Files\Genetec\Plugins\MyModule\MyModule.dll" />
<Item Key="AddFoldersToAssemblyProbe" Value="True" />
</Configuration>
</PluginInstallation>Combined Plugin (Single DLL):
<PluginInstallation>
<Version>1</Version>
<Configuration>
<Item Key="Enabled" Value="True" />
<Item Key="ServerModule" Value="C:\Program Files\Genetec\Plugins\MyPlugin\MyPlugin.dll" />
<Item Key="ClientModule" Value="C:\Program Files\Genetec\Plugins\MyPlugin\MyPlugin.dll" />
<Item Key="AddFoldersToAssemblyProbe" Value="True" />
</Configuration>
</PluginInstallation>Starting with Security Center SDK 5.12.2, plugins can be built targeting .NET 8 for improved performance and modern framework features. .NET 8 plugins use a multi-project architecture to maintain compatibility with existing client applications.
.NET 8 plugins require a split architecture because client applications do not support .NET 8:
- Server Module: Built for .NET 8 and runs in the GenetecPlugin.exe process
- Client Module: Must be built for .NET Framework 4.8.1 and run inside Config Tool and Security Desk applications
- Common Assembly: Multi-targets both frameworks for shared code and interfaces
Important: Config Tool continue to run on .NET Framework 4.8.1 and cannot load .NET 8 assemblies. This is why .NET 8 plugins require separate Client assemblies built for .NET Framework, even when using .NET 8.
The term Client in .NET 8 plugin architecture refers to the Config Tool being the client application that lists server-side plugins. This assembly:
- Purpose: Enables plugin discovery of plugins built for .NET 8
- Contains: Plugin (with "empty" implementation) and PluginDescriptor class
- Framework: Must target .NET Framework 4.8.1
- Not a ClientModule: Despite the name, this assembly should not contain a custom Workspace Module class
- Discovery Only: Security Center uses this assembly to enumerate available plugin types without instantiating them
Key Point: The "Client" assembly exists solely for discovering .NET 8 server plugins.
For .NET 8 plugins, the Client assembly must contain:
-
Plugin Descriptor Class: The class with
[PluginProperty]attribute for plugin discovery -
Database Support Interface: If your plugin supports database operations, the Client assembly must implement
IPluginDatabaseSupport(even with empty methods) for Security Center to recognize database capabilities
XML Configuration:
<PluginInstallation>
<Version>1</Version>
<Configuration>
<Item Key="Enabled" Value="True" />
<Item Key="ServerModule" Value="C:\Program Files\Genetec\Plugins\MyPlugin\MyPlugin.Server.dll" />
<Item Key="Client" Value="C:\Program Files\Genetec\Plugins\MyPlugin\MyPlugin.Client.dll" />
<Item Key="NetCore" Value="True" />
<Item Key="AddFoldersToAssemblyProbe" Value="True" />
</Configuration>
</PluginInstallation>The NetCore key with value True tells Security Center that only the server module is built for .NET 8 and should be loaded in the .NET 8 runtime environment. The client assembly must still be built for .NET Framework 4.8.1 and is used exclusively for plugin discovery by Config Tool.
Registry Configuration:
Key: HKEY_LOCAL_MACHINE\SOFTWARE\Genetec\Security Center\Plugins\MyNetCorePlugin
Values:
Enabled = True
ServerModule = C:\Program Files\Genetec\Plugins\MyPlugin\MyPlugin.Server.dll
Client = C:\Program Files\Genetec\Plugins\MyPlugin\MyPlugin.Client.dll
NetCore = True
AddFoldersToAssemblyProbe = True
Configuration Key Clarification:
-
ServerModule: Points to the .NET 8 plugin DLL that runs in GenetecPlugin.exe -
Client: Points to the .NET Framework 4.8.1 assembly used for discovery by Config Tool (not a traditional client module)
If you're using Security Center 5.13 or later, you don't need to worry about choosing between registry and XML methods. Here's how the automatic migration works:
-
On Startup: Security Center scans both registry locations and creates XML files for any registry entries that don't already have corresponding XML files
-
Runtime Monitoring: The registry is monitored during runtime - new registry entries automatically trigger XML file creation
-
XML Takes Precedence: Once an XML file exists, it becomes the authoritative source and registry changes are ignored
-
Bidirectional Sync: Deleting an XML file also deletes the corresponding registry entry to prevent automatic recreation
- Existing deployments continue working - your registry entries are automatically migrated
- You can use either method - registry entries will become XML files automatically
- XML files are the source of truth - once created, they take precedence over registry
- Deployment scripts can use both methods for maximum compatibility
Recommended approach: Use XML files directly
- Create XML files in the appropriate directory for your Security Center version
- No registry access required
- Better security and maintainability
Recommended approach: Deploy both methods simultaneously
- Create registry entries (works on all versions)
- Create XML files (for 5.13+ optimization)
- Let Security Center handle the migration automatically
Benefits:
- Works on all Security Center versions
- Registry provides backup if XML files are accidentally deleted
- No version detection logic needed in deployment scripts
- Automatic migration handles the transition
Required approach: Registry only
- Only the Windows Registry method is supported
- Administrative access required for registry modification
Set AddFoldersToAssemblyProbe to True if your plugin depends on additional DLLs located in the same folder as your main plugin DLL.
When needed:
- Your plugin uses third-party libraries
- Your plugin has custom dependencies not in the GAC
- Your DLLs are not in the standard application directories
What it does:
- Instructs .NET to search the plugin's directory for dependencies
- Only searches the immediate folder (not recursive)
- Required for most plugins with external dependencies
If omitted:
- Dependencies will only be resolved from application base directory and GAC
- Plugin will fail to load if dependencies can't be found
- Failure is silent - no error messages in the UI
The NetCore flag is only needed for .NET 8 plugins (Security Center 5.12.2+):
What it does:
- Tells Security Center that only the server module is built for .NET 8
- Server module runs in .NET 8 runtime environment
- Client assembly still runs in .NET Framework 4.8.1 environment for plugin discovery
When to use:
- Your server module targets .NET 8
- Your client assembly targets .NET Framework 4.8.1 (required for Config Tool discovery)
- You want modern .NET 8 performance and features server-side
Architecture Impact:
- Server module (.NET 8): Contains actual plugin logic and runs in GenetecPlugin.exe
- Client assembly (.NET Framework 4.8.1): Contains only plugin descriptors for Config Tool discovery
For Plugins:
- Open Config Tool
- Navigate to the Plugins task
- Click Add an entity → Plugin
- Your plugin should appear in the available types list
For Workspace Modules:
- Open Config Tool or Security Desk
- Go to Help → About → Installed Components
- Your client module DLL should be listed
Plugin not appearing in Config Tool:
- Check that
ServerModulepath points to a valid DLL - Verify plugin class has
[PluginProperty]attribute - Ensure plugin class has a public parameterless constructor
- Check that
Enabledis set to"True"
Workspace module not loading:
- Verify
ClientModulepath points to a valid DLL - Check Installed Components list in About dialog
Dependencies not loading:
- Set
AddFoldersToAssemblyProbetoTrue - Verify all dependency DLLs are in the same folder as the main DLL
- Consider using a custom assembly resolver for complex scenarios
Silent failures:
- Enable logging for troubleshooting:
Genetec.Platform.Common.Core.PluginInstallerGenetec.Platform.Common.PluginInstallerGenetec.Plugin.Role.Services.PluginLoaderServiceGenetec.Reflection.PluginsProvider
To completely uninstall a plugin or workspace module:
-
Delete XML file (if exists):
- 5.13.0-5.13.2:
C:\ProgramData\Genetec Security Center\PluginInstallations\Plugins\ - 5.13.3+:
C:\Program Files (x86)\Common Files\Genetec System\PluginInstallations\Plugins\
- 5.13.0-5.13.2:
-
Delete registry entries from both locations:
HKEY_LOCAL_MACHINE\SOFTWARE\Genetec\Security Center\PluginsHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Genetec\Security Center\Plugins
-
Remove plugin DLLs from all referenced locations
For 5.13+ systems:
- XML files take precedence - plugin will continue loading if only the registry is deleted
- Deleting XML files also deletes corresponding registry entries automatically
- If you delete only the XML file while Security Center is offline, but leave the registry entry, the XML file will be recreated on startup
For pre-5.13 systems:
- Only need to delete registry entries and DLLs
- No automatic recreation behavior
Do I need to restart Security Center after modifying an XML file? No. Security Center continuously monitors the XML folder and automatically detects changes within seconds. Only restart if you need to overwrite a DLL that's currently in use.
Can I use relative paths in configuration?
No. Always use full absolute paths for both ServerModule and ClientModule. Relative paths will not be resolved.
What happens if a DLL path is invalid? The system silently skips loading that component. Server and client components load independently; if one fails, the other can still succeed.
What's the difference between ClientModule and Client assembly in .NET 8 plugins?
For .NET 8 plugins, ClientModule in configuration points to the Client assembly (not a traditional workspace module). This assembly is built for .NET Framework 4.8.1 and contains only plugin descriptors for Config Tool discovery. It doesn't run client-side functionality like workspace modules do.
Can one DLL be used for both server and client?
Yes, for .NET Framework plugins. Use the same DLL path for both ServerModule and ClientModule. The DLL must contain both plugin logic (inherits from Genetec.Sdk.Plugin.Plugin) and workspace logic (inherits from Genetec.Sdk.Workspace.Modules.Module). However, for .NET 8 plugins, you must use separate assemblies due to framework compatibility requirements.
How does registry migration work in 5.13+? When Security Center starts, it automatically scans registry locations and creates XML files for any entries that don't have corresponding XML files. The registry is also monitored during runtime for new entries.
What's the difference between .NET 8 and .NET Framework plugins? .NET 8 plugins offer better performance and modern language features but require a split architecture (server in .NET 8, client assembly in .NET Framework 4.8.1) because Config Tool and Security Desk can't load .NET 8 assemblies. The client assembly is used solely for plugin discovery by Config Tool.
Why is the .NET 8 client assembly called "Client"? The term "Client" refers to Config Tool being the client application that discovers server-side plugins. This assembly enables Config Tool to safely enumerate .NET 8 plugin types without loading .NET 8 runtime dependencies. It's not a traditional client-side workspace module.
-
Security Center SDK Developer Guide Overview of the SDK framework and how to build integrations with Security Center.
-
Platform SDK
- Platform SDK Overview Introduction to the Platform SDK and core concepts.
- SDK Certificates Details certificates, licensing, and connection validation.
- Entity Guide Explains the core entity model, inheritance, and how to work with entities.
- Entity Cache Guide Describes the engine's local entity cache and synchronization.
- SDK Transactions Covers batching operations for performance and consistency.
- ReportManager Querying entities and activity data from Security Center.
- Events and Actions Subscribing to events and handling actions.
- Logging with the Genetec SDK How to configure logging, diagnostics, and debug methods.
- Referencing SDK Assemblies Best practices for referencing assemblies and resolving them at runtime.
- SDK Compatibility Guide Understanding backward compatibility and versioning in the SDK.
-
Plugin SDK
- Plugin SDK Overview Introduction to plugin architecture and capabilities.
- Plugin SDK Certificates SDK certificate requirements for plugin roles.
- Plugin SDK Lifecycle Initialization and disposal patterns.
- Plugin SDK Threading Threading model, QueueUpdate, and async patterns.
- Plugin SDK Configuration Configuration storage and monitoring.
- Plugin SDK Restricted Configuration Secure credential storage and admin-only configuration.
- Plugin SDK Database Database integration and schema management.
- Plugin SDK Events Event subscription and handling.
- Plugin SDK Queries Query processing and response handling.
- Plugin SDK Request Manager Request/response communication with clients.
- Plugin SDK Entity Ownership Understanding plugin-owned entities, running state management, and ownership release.
- Plugin SDK Entity Mappings Using EntityMappings for plugin-specific configuration and external system integration.
- Plugin SDK State Management Reporting plugin health and diagnostics.
- Plugin SDK Server Management High availability and server failover.
- Custom Privileges Defining and enforcing custom privileges.
- Resolving Non-SDK Assemblies Handling third-party dependencies in plugins and workspace modules.
- Deploying Plugins Registering and deploying plugins and workspace modules.
-
- Macro SDK Developer Guide Complete guide to creating server-side automation scripts in Security Center using C#.
- Getting Started Setup, authentication, and basic configuration for the Web SDK.
- Referencing Entities Entity discovery, search capabilities, and parameter formats.
- Entity Operations CRUD operations, multi-value fields, and method execution.
- Partitions Managing partitions, entity membership, and user access control.
- Custom Fields Creating, reading, writing, and filtering custom entity fields.
- Custom Card Formats Managing custom credential card format definitions.
- Actions Control operations for doors, cameras, macros, and notifications.
- Events and Alarms Real-time event monitoring, alarm monitoring, and custom events.
- Incidents Incident management, creation, and attachment handling.
- Reports Activity reports, entity queries, and historical data retrieval.
- Performance Guide Optimization tips and best practices for efficient API usage.
- Reference Entity GUIDs, EntityType enumeration, and EventType enumeration.
- Under the Hood Technical architecture, query reflection, and SDK internals.
- Troubleshooting Common error resolution and debugging techniques.
- Media Gateway Guide Setup and configuration of the Media Gateway role for video streaming.
- Web Player Guide Complete guide to integrating GWP for live and playback video streaming.
- Web Player API Reference Full API documentation with interfaces, methods, properties, and events.
- Web Player Sample Application Comprehensive demo showcasing all GWP features with timeline and PTZ controls.
- Genetec Web Player Multiplexing Sample Multi-camera grid demo using a shared WebSocket connection.