Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Custom_main

github-actions[bot] edited this page Dec 7, 2025 · 1 revision

This guide explains how to include and use a custom_main.js file in your Electron.NET application for advanced Electron/Node.js customization.

Why use custom_main.js?

  • Register custom protocol handlers (e.g., myapp://) — protocols must be registered before the app is fully initialized
  • Integrate Node.js modules (e.g., telemetry, OS APIs)
  • Control startup logic (abort, environment checks)
  • Set up IPC messaging or preload scripts

Step-by-Step Process

1. Create the custom_main.js file

Place your custom logic in electron/custom_main.js:

module.exports.onStartup = function(host) {
    // Example: Register a global shortcut for opening dev tools
    const { app, globalShortcut, BrowserWindow } = require('electron');
    app.on('ready', () => {
        const ret = globalShortcut.register('Control+Shift+I', () => {
            BrowserWindow.getAllWindows().forEach(win => win.webContents.openDevTools());
            console.log('Ctrl+Shift+I is pressed: DevTools opened!');
        });
    });
    app.on('will-quit', () => {
        globalShortcut.unregisterAll();
    });
    return true;
};

2. Configure your .csproj to copy custom_main.js to output

Add this to your .csproj file:

<ItemGroup>
  <None Update="electron\custom_main.js">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <TargetPath>.electron\custom_main.js</TargetPath>
  </None>
</ItemGroup>

3. Build and run your app

Use the standard build/run commands:

dotnet build
dotnet run

Electron.NET will automatically load and execute your custom_main.js before initializing the .NET backend.

Advanced Usage

Use environment variables to control features:

const env = process.env.ASPNETCORE_ENVIRONMENT || 'Production';
if (env === 'Development') { /* enable dev features */ }

Notes

  • custom_main.js must use CommonJS syntax (module.exports.onStartup = ...).
  • Place the file in your source directory and copy it to .electron using .csproj.
  • Electron.NET will abort startup if onStartup returns false.

Complete example is available here ElectronNetSampleApp

Clone this wiki locally

Morty Proxy This is a proxified and sanitized view of the page, visit original site.