【问题标题】:Where is my Electron App located我的电子应用程序在哪里
【发布时间】:2017-06-08 02:03:44
【问题描述】:

我有一个电子应用程序,它也对同一目录中的文件进行操作。这些不是用户选择的文件,也不是捆绑在电子应用程序中的文件,但我确实需要引用它们

例如:

  • /Users/test/Documents/myapp.app
  • /Users/test/Documents/example.zip

我需要知道该应用程序的位置,例如:

  • /用户/测试/文档

但是当 test.app 运行时,我得到:

  • /Users/test/Documents/myapp.app/Contents/Resources/app/

当它尝试访问/Users/test/Documents/myapp.app/Contents/Resources/app/test.zip 时导致错误,或者如果我使用相对路径/test.zip

在这种情况下如何可靠地访问 example.zip?请注意,我不能将它与我的应用程序捆绑在一起,它是由其他人放置在那里的,所以移动它不是一种选择,我希望它是一个文件。

【问题讨论】:

    标签: node.js electron filepath


    【解决方案1】:

    我和一个朋友查看了 Atom 是如何做到的,并得出了这个解决方案:

    function getAppRoot() {
      if ( process.platform === 'win32' ) {
        return path.join( app.getAppPath(), '/../../../' );
      }  else {
        return path.join( app.getAppPath(), '/../../../../' );
      }
    }
    

    【讨论】:

    • 非常不错的收获!只是让我的额头不再敲桌子了:)
    【解决方案2】:

    我认为app.getPath('exe')process.execPath 是您正在寻找的。它们都为您提供当前使用的可执行文件的路径。

    编辑:查看 app.getPath() 的文档以获取所有不同文件夹的路径(例如 home、appdata、文档等)

    【讨论】:

    • process.execPath 给了我...../test/test.app/Contents/Resources/app/ 文件夹,app.getPath('exe') 也是如此。如果我在我的项目文件夹中并运行 electron . 它会给 ..../test/ 这是我想要的,但我不想要任何这些 test.app/Contents/Resources/app 东西
    • app.getPath( 'exe' ) 在 Windows 上返回可执行文件,且 .exe 文件名完整,process.execPath 未定义
    • 我认为您必须解决该输出并使用path.join 来获得您想要的。只有 macOS 具有稍深的应用程序结构,因此您只需检查 process.platform == 'darwin' 并向上四次目录。例如。 path.join(app.getPath('exe'), '..', '..', '..', '..')。它不漂亮,但很有效。
    【解决方案3】:

    您在哪里运行 Electron 应用程序?如果它在“文档”下运行(我假设是 Windows),您可以将文档传递给 app.getPath,如下所示:app.getPath('documents')

    如果您从渲染进程中调用它,您可能必须导入 remote 并在渲染进程 remote.app.getPath('documents'); 中执行以下操作。

    这个electron doc会更好的解释你可以传入的路径选项。

    【讨论】:

    • 它可能在任何地方,问题的目的是找出这一点,如果我将 test.app 复制到文件夹 X,我如何从我的应用程序中发现 X?
    • 那么,根据您所说的,您需要将 Electron 应用程序放在任何文件夹中,并且能够访问该当前目录中的文件吗?这个应用程序是否作为可执行文件运行?或者您只是将其作为npm run electron . 运行,因为它会在您是否可以使用“捆绑/打包”应用程序访问文件方面产生重大影响。
    • 作为一个可执行文件,我对包/包中的文件不感兴趣,请参阅我发布的答案中的 getAppRoot 函数,它可以很好地完成工作
    【解决方案4】:

    您可以使用fs.readdir 函数列出特定目录中的所有文件(可以是您的应用程序或任何地方)。您可以从代码中创建一个目录来放置所有新文件,这样您就可以更轻松地正确列出它们以进行处理。

    const testFolder = './tests/';
    const fs         = require('fs');
    
    fs.readdir(testFolder, (err, files) => {
        files.forEach(file => {
            console.log(file);
        });
    });
    

    How do you get a list of the names of all files present in a directory in Node.js?

    【讨论】:

    • 但是我不知道我在哪个文件夹中,这是我想在我的问题中弄清楚的,我的 .app/.exe 应用程序在哪里?
    猜你喜欢
    • 2017-10-10
    • 2023-03-03
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多