使用 electron-builder 的 snap 安装程序的默认主目录

Posted

技术标签:

【中文标题】使用 electron-builder 的 snap 安装程序的默认主目录【英文标题】:Default home directory for snap installer using electron-builder 【发布时间】:2021-04-22 23:22:28 【问题描述】:

我目前正在构建一个电子应用程序,并使用电子构建器构建安装程序,例如 .deb.snap。在应用程序内部,出于某种原因,我需要访问用户主目录,并且我正在使用 process.env.HOME || process.env.USERPROFILE 来获取主目录(app.getPath('home') 也返回相同的结果)。这适用于其他情况,但是当应用程序使用.snap 安装时,而不是实际的主目录(/home/username)返回~/snap/<app_name>/3/ 作为主目录。 (3 是 snap 版本号)

在所有情况下如何获取实际的主目录(/home/username)?

【问题讨论】:

你好!如果您的问题已得到解答,请考虑使用答案旁边的绿色复选标记进行投票/接受。 【参考方案1】:

注意~/ 不是有效路径;它被外壳扩展为$HOME。在大多数情况下,您要查找的实际路径是/home/username。一个简单的解决方案是简单地假设它是主目录。

为了防止主文件夹不在此位置的情况,我们应该询问操作系统:

操作系统模块

const os = require("os");

const user_name = os.userInfo().username;
const user_dir = os.userInfo().homedir;

console.log(user_name, user_dir);

来自NodeJS docs:

os.userInfo() 返回的 homedir 值由操作系统提供。这与 os.homedir() 的结果不同,后者在返回操作系统响应之前查询主目录的环境变量。

posix 模块

(原始答案)如果由于某种原因上述方法不起作用,您可以显式使用getpwnam/etc/passwd 中查找实际主目录:

const posix = require("posix");
const os = require("os");

const user_name = os.userInfo().username;
const user_dir = posix.getpwnam(user_name).dir;

console.log(user_name, user_dir);

您需要先安装posix 模块:

npm install posix

【讨论】:

当我使用showSaveDialog (electronjs.org/docs/api/dialog) 时,它会打开一个类似文件浏览器的鹦鹉螺(在 ubuntu 中)。如果我单击Home 选项卡,则会打开~/snap/<app_name>/3/。对于新用户来说,它会让人感到困惑,因为它显示为Home,但它并没有打开用户的主页。有什么办法可以解决吗? @Eular,这似乎是一个单独的(和有趣的)问题!我相信它应该是它自己的 SO 问题,而不是隐藏在评论中! 添加为问题的额外部分 @Eular,您以实质性方式编辑问题意味着使以前合适的答案和付出的努力无效。您的原始问题以任何方式都没有提到保存/打开对话框,这是一个完全不同的问题。我强烈建议您回滚编辑并发布一个新问题,在那里您询问您的实际问题,而不是修改已回答的现有问题! 完成@***.com/questions/65872077/…

以上是关于使用 electron-builder 的 snap 安装程序的默认主目录的主要内容,如果未能解决你的问题,请参考以下文章

Electron 和 TypeScript (electron-builder):“不能在模块外使用 import 语句”

Electron 使用 electron-builder 创建 MSI 安装程序

使用electron-builder来打包

electron-builder 打包流程

Electron-Builder 包含外部文件夹

使用 electron-builder 向 macOS info.plist 添加协议的正确方法是啥?