【问题标题】:How does Electron determine application identity for requestSingleInstanceLock?Electron 如何确定 requestSingleInstanceLock 的应用程序身份?
【发布时间】:2020-09-07 11:51:46
【问题描述】:

我们正在尝试以不同的名称构建我们的 Electron 应用程序,使用不同的 appId,以便我们可以与原始应用程序一起运行它 - 但它总是会触发 Electrons 'second-instance' - 至少在我所在的 Windows 上米测试。

我们需要做什么才能让 Electron 成为两个完全独立的应用程序?

【问题讨论】:

    标签: node.js electron electron-builder


    【解决方案1】:

    我们在使用electron-packager 时遇到了同样的问题。通过appname 更改可执行文件名称是不够的,但在package.json 中更改name 也可以。

    我们在打包后使用构建系统中的dot-json 来更改它。见this answer about using dot-json from npm

    关于什么用于身份的问题:据我所知,电子在%USER_DATA_DIR%\%APPNAME_FROM_PROJECT_JSON%\lockfile 中使用了一个锁文件。在我的机器上,一个名为electron-shell 的应用程序变成了C:\Users\UserName\AppData\Roaming\electron-shell\lockfile。可以使用 Sysinternals Process-Explorer 进行查找。

    【讨论】:

    • 嘿@sanosdole 感谢您的回答!我试过了,但在 Windows 上使用 electron-builder 并没有为我做这件事,即使你认为它会。请问,你是在什么操作系统上测试的?
    • 我们仅在 Windows 上使用 Electron 10.1.1 进行了测试。我们在打包后在打包的应用程序中更改了 name 中的 resources\app\package.json
    • 我添加了关于电子如何确定requestSingleInstanceLock身份的描述
    • 很棒的信息,谢谢分享!也就是说,我认为在打包后 使用您的更改方法是非常不可取的,除非在开发环境中。
    • 我们可以在打包前直接在 package.json 中更改它,但我们对不同的应用程序品牌使用相同的 project.json。因此,我们需要在打包后将其改回通用名称,以防止源代码管理失控。如果包装变得更复杂,比如使用 ASAR 档案,我们就会这样做。当然,如果工具在打包过程中支持这一点,那就更好了。
    【解决方案2】:

    我们为解决这个问题所做的就是将 nsis.guid 自己设置为预定义的 UUIDv5 字符串。

    您可以通过手动设置GUID 重新打包应用程序而无需触发'second-instance' - 至少在Windows 上是这样。

    更改appIdname 应该会更改此according to the docs。它确实改变了 GUID,正如通过 Windows 注册表 (regedit) 确认的那样,但这还不够。

    【讨论】:

      猜你喜欢
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多