Electron:app.on 'open-file' 的 Windows 替代方案
Posted
技术标签:
【中文标题】Electron:app.on \'open-file\' 的 Windows 替代方案【英文标题】:Electron: Windows alternative for app.on 'open-file'Electron:app.on 'open-file' 的 Windows 替代方案 【发布时间】:2020-10-06 22:56:58 【问题描述】:我正在构建一个 Electron 应用程序,用于在 Windows 计算机上编辑 .txt 文件。我已经使用电子构建器fileAssociations
打开 .txt 文件,但是我无法获取文件的路径。当我查看 Electron 文档时,我发现 this 这正是我想要的,除了它仅适用于 mac...有没有办法在 Windows 上获得相同的功能?
【问题讨论】:
【参考方案1】:在 Windows 上,您必须将 process.argv(在主进程中)解析为 获取文件路径。
来自https://github.com/electron/electron/blob/master/docs/api/app.md#event-open-file-macos
【讨论】:
您能否更彻底地解释一下如何做到这一点? 我认为作者的问题不是解析process.argv,问题是他知道什么时候应该解析process.argv。我也找不到这方面的活动【参考方案2】:在Windows上,需要在主进程中使用process.argv
来读取文件路径。根据this answer,您可以使用fs
包来打开、读取和写入文件。还有其他几种方法可以做同样的事情。
另外,this blog post 的以下 sn-p 可能会有所帮助。
如何配置您的应用以在 Windows 中打开链接文件
在 Windows 上,您必须解析 process.argv 以获取文件路径。 然后,您可以使用 IPC 模块处理来自渲染器进程(网页)的消息并从文件中检索数据存储。我们就是这样做的:
在主进程中:
var ipc = require('ipc');
var fs = require('fs');
// read the file and send data to the render process
ipc.on('get-file-data', function(event)
var data = null;
if (process.platform == 'win32' && process.argv.length >= 2)
var openFilePath = process.argv[1];
data = fs.readFileSync(openFilePath, 'utf-8');
event.returnValue = data;
);
我不太熟悉electron
,否则我会尝试给你一个更好的答案,但这是我对它的理解所能找到的。我希望这会有所帮助!
【讨论】:
上面的博文链接也可能回答你的其他question【参考方案3】:正如 Lucas Roland 所说,您必须解析 process.argv
才能获取文件路径
if (process.argv.length >= 2) // or electron.remote.process.argv
let filePath = process.argv[1];
//open, read, handle file
【讨论】:
【参考方案4】:对于 Windows,在应用程序就绪上解析 process.argv 对我有用。所以在某处的主要过程中:
const app = require('electron');
const devEnv = /electron/.test(process.argv[0]);
app.on('ready', () =>
if (process.platform.startsWith('win') && !devEnv && process.argv.length >= 2)
const filePath = process.argv[1];
// In my app, I initialise a new window here and send filePath through
// to the renderer process so it can be read and displayed.
else
// Create whatever your default window is (in my case, an empty document)
);
在 Windows 上,每次打开新文件时都会触发此事件,即使应用程序中已经打开了另一个文件。
还请记住,在开发过程中,我们使用electron .
或electron . --debug
或类似名称启动应用程序。因此,我还测试了第一个参数是否为electron
,并在这种情况下跳过了文件打开逻辑(devEnv
评估为'true'的情况)。
【讨论】:
以上是关于Electron:app.on 'open-file' 的 Windows 替代方案的主要内容,如果未能解决你的问题,请参考以下文章
如何在app.on(“before-quit”)中使用shutdown.bat停止Tomcat?