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 替代方案的主要内容,如果未能解决你的问题,请参考以下文章

Electron之Main有什么关系?

如何在app.on(“before-quit”)中使用shutdown.bat停止Tomcat?

电子:app.on('ready') 永远不会被调用

Electron使用与学习--(页面间的通信)

setRepresentedFilename使电子应用程序无法正常工作

电子占据100%的屏幕(不是全屏)