diff --git a/src/ElectronNET.API/Electron.cs b/src/ElectronNET.API/Electron.cs
index 23f9902..5c63616 100644
--- a/src/ElectronNET.API/Electron.cs
+++ b/src/ElectronNET.API/Electron.cs
@@ -88,5 +88,10 @@
/// Control your app in the macOS dock.
///
public static Dock Dock { get { return Dock.Instance; } }
+
+ ///
+ /// Electeon extensions to the Nodejs process object.
+ ///
+ public static Process Process { get { return Process.Instance; } }
}
}
\ No newline at end of file
diff --git a/src/ElectronNET.API/Process.cs b/src/ElectronNET.API/Process.cs
new file mode 100644
index 0000000..daa692b
--- /dev/null
+++ b/src/ElectronNET.API/Process.cs
@@ -0,0 +1,61 @@
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace ElectronNET.API
+{
+ ///
+ /// Electron's process object is extended from the Node.js process object. It adds the
+ /// events, properties, and methods.
+ ///
+ public sealed class Process
+ {
+ internal Process() { }
+
+ internal static Process Instance
+ {
+ get
+ {
+ if (_process == null)
+ {
+ lock (_syncRoot)
+ {
+ if (_process == null)
+ {
+ _process = new Process();
+ }
+ }
+ }
+
+ return _process;
+ }
+ }
+
+ private static Process _process;
+
+ private static readonly object _syncRoot = new();
+
+ ///
+ /// TBD
+ ///
+ ///
+ public async Task GetExecPathAsync(CancellationToken cancellationToken = default)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+
+ var taskCompletionSource = new TaskCompletionSource();
+ using (cancellationToken.Register(() => taskCompletionSource.TrySetCanceled()))
+ {
+ BridgeConnector.Socket.On("process-execPathCompleted", (text) =>
+ {
+ BridgeConnector.Socket.Off("process-execPathCompleted");
+ taskCompletionSource.SetResult((string) text);
+ });
+
+ BridgeConnector.Socket.Emit("process-execPath");
+
+ return await taskCompletionSource.Task
+ .ConfigureAwait(false);
+ }
+ }
+ }
+}
diff --git a/src/ElectronNET.API/ServiceCollectionExtensions.cs b/src/ElectronNET.API/ServiceCollectionExtensions.cs
index f933731..a63aacf 100644
--- a/src/ElectronNET.API/ServiceCollectionExtensions.cs
+++ b/src/ElectronNET.API/ServiceCollectionExtensions.cs
@@ -28,6 +28,7 @@ namespace ElectronNET.API
.AddSingleton(provider => HostHook.Instance)
.AddSingleton(provider => PowerMonitor.Instance)
.AddSingleton(provider => NativeTheme.Instance)
- .AddSingleton(provider => Dock.Instance);
+ .AddSingleton(provider => Dock.Instance)
+ .AddSingleton(provider => Process.Instance);
}
}
diff --git a/src/ElectronNET.CLI/Commands/Actions/DeployEmbeddedElectronFiles.cs b/src/ElectronNET.CLI/Commands/Actions/DeployEmbeddedElectronFiles.cs
index 205ff7b..c0205b6 100644
--- a/src/ElectronNET.CLI/Commands/Actions/DeployEmbeddedElectronFiles.cs
+++ b/src/ElectronNET.CLI/Commands/Actions/DeployEmbeddedElectronFiles.cs
@@ -42,6 +42,7 @@ namespace ElectronNET.CLI.Commands.Actions
EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "browserView.js", "api.");
EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "powerMonitor.js", "api.");
EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "nativeTheme.js", "api.");
+ EmbeddedFileHelper.DeployEmbeddedFile(hostApiFolder, "process.js", "api.");
string splashscreenFolder = Path.Combine(tempPath, "splashscreen");
if (Directory.Exists(splashscreenFolder) == false)
diff --git a/src/ElectronNET.CLI/ElectronNET.CLI.csproj b/src/ElectronNET.CLI/ElectronNET.CLI.csproj
index fd30a57..074ffd8 100644
--- a/src/ElectronNET.CLI/ElectronNET.CLI.csproj
+++ b/src/ElectronNET.CLI/ElectronNET.CLI.csproj
@@ -68,6 +68,7 @@
+
diff --git a/src/ElectronNET.Host/api/process.js b/src/ElectronNET.Host/api/process.js
new file mode 100644
index 0000000..80bdaf7
--- /dev/null
+++ b/src/ElectronNET.Host/api/process.js
@@ -0,0 +1,10 @@
+"use strict";
+let electronSocket;
+module.exports = (socket) => {
+ electronSocket = socket;
+ socket.on('process-execPath', () => {
+ const value = process.execPath;
+ electronSocket.emit('process-execPathCompleted', value);
+ });
+};
+//# sourceMappingURL=process.js.map
\ No newline at end of file
diff --git a/src/ElectronNET.Host/api/process.js.map b/src/ElectronNET.Host/api/process.js.map
new file mode 100644
index 0000000..e2e659a
--- /dev/null
+++ b/src/ElectronNET.Host/api/process.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"process.js","sourceRoot":"","sources":["process.ts"],"names":[],"mappings":";AACA,IAAI,cAAc,CAAC;AAEnB,iBAAS,CAAC,MAAc,EAAE,EAAE;IACxB,cAAc,GAAG,MAAM,CAAC;IAExB,MAAM,CAAC,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC/B,cAAc,CAAC,IAAI,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"}
\ No newline at end of file
diff --git a/src/ElectronNET.Host/api/process.ts b/src/ElectronNET.Host/api/process.ts
new file mode 100644
index 0000000..a559869
--- /dev/null
+++ b/src/ElectronNET.Host/api/process.ts
@@ -0,0 +1,11 @@
+import { Socket } from 'net';
+let electronSocket;
+
+export = (socket: Socket) => {
+ electronSocket = socket;
+
+ socket.on('process-execPath', () => {
+ const value = process.execPath;
+ electronSocket.emit('process-execPathCompleted', value);
+ });
+};
diff --git a/src/ElectronNET.Host/main.js b/src/ElectronNET.Host/main.js
index 02c3ff7..f90c2d5 100644
--- a/src/ElectronNET.Host/main.js
+++ b/src/ElectronNET.Host/main.js
@@ -15,6 +15,7 @@ let nativeTheme;
let dock;
let launchFile;
let launchUrl;
+let processApi;
let manifestJsonFileName = 'electron.manifest.json';
let watchable = false;
@@ -250,6 +251,7 @@ function startSocketApiBridge(port) {
if (powerMonitor === undefined) powerMonitor = require('./api/powerMonitor')(socket);
if (nativeTheme === undefined) nativeTheme = require('./api/nativeTheme')(socket);
if (dock === undefined) dock = require('./api/dock')(socket);
+ if (processApi === undefined) processApi = require('./api/process')(socket);
socket.on('register-app-open-file-event', (id) => {
global['electronsocket'] = socket;