jjzjj

windows - 带 Electron 链接的msi安装程序

coder 2024-06-18 原文

我是Electron的新手,正在构建要在Windows上安装的应用程序。
我在Electron的docs中阅读了有关如何分发您的应用程序的文档,并且我知道:

electron-forge
electron-builder
electron-packager

目前,我正在与:
"electron-builder-squirrel-windows": "^19.20.0",
"electron-builder": "^19.20.0",
"electron": "^1.6.11"

鉴于此,我能够创建一个Setup.exe来安装我的应用程序,但是我当时是
无法为安装过程创建任何UI。

我想给用户选项,如果他需要,可以更改安装路径,并显示我希望他接受的最终许可,...

electron.atom.io上未提供有关此信息

看一下用Electron构建的Atom编辑器或Slack,我看到可以在安装过程中显示一些UI。通常这是怎么做的?

编辑:
我刚刚读到有关windows-installer的信息,您需要为此使用松鼠事件
编辑编辑:
  • 更改标题为“带有Electron的链式msi安装程序”

  • Notice that the first time the installer launches your app, your app will see a --squirrel-firstrun flag. This allows you to do things like showing up a splash screen or presenting a settings UI.

    最佳答案

    作为使用整个 Electron 封装堆栈来开发Windows MSI安装交付的替代方法,您可以考虑使用以下机制作为另一种有用的解决方案:

  • Webpack -构建您的应用程序客户端可分发的
  • Electron 封装程序-构建您的 Electron 二进制文件(在这种情况下,
    对于Windows)
  • WiX工具集-构建Windows MSI安装程序。

  • 当然,无论您选择使用哪种安装程序,都必须执行步骤1和2。我发现webpack是打包有角度的Web应用程序(这是我从事的工作)的最稳定,可配置和完整的解决方案,而electron-packager是您想要真正构建平台时无法使用的一种工具您的应用的特定二进制文件。

    在我们的案例中,我使用gulp脚本来 package webpackelectron-packager模块,我通过它们的API而不是通过它们的命令行派生来调用这些模块,以便将它们维护在一致的javascript上下文中,以便于在构建过程中进行维护和错误处理(命令与javascript,imo中的程序包,模块,文件和函数相比,线性解决方案的范围和重新用途要困难得多。

    通过理解我指的是哪种项目,可以更容易地解释这一点。特别是如果您要构建的 Electron 应用程序具有完整的项目结构,例如:
    C:.
    +---assets/
    +---ClientSide
    ¦   +---index.html
    ¦   +---app
    ¦   ¦   +---app.component.ts
    ¦   ¦   +---app.module.ts
    ¦   ¦   +---main.ts
    ¦   ¦   +---AppContent/
    ¦   ¦   +---help/
    ¦   ¦   +---modals/
    ¦   ¦   +---panels/
    ¦   ¦   +---shared/
    ¦   +---Styles
    ¦   ¦   +---dist/
    ¦   ¦   +---svgs/
    ¦   +---test
    ¦       +---AppContent/
    ¦       +---modals/
    ¦       +---panels/
    ¦       +---shared/
    +---dist/
    +---edist
    |   \---Application-win32-ia32 [*location of binary source for the install]
    +---ServerSide
    ¦   +---app.js
    ¦   +---server.js
    ¦   +---test/
    +---Installer
        +---buildMSI.bat
        +---Application/
    
    gulpfile.js
    karma.conf.js
    main.js
    package.json
    README.md
    webpack.config.js
    

    这种结构显示了一个项目,该项目具有您在真实开发环境中所需的所有部分,例如webpack,配置,业力(客户端测试),用于 package 操作的gulp(用于webpack的 package 操作, Electron package 程序),窗口用于运行WiX命令的批处理文件等。

    对于新用户设置和构建您的项目,这种方法的流程将(可能在您的README.md中记录)类似于以下步骤:
  • git clone <project/path>-将存储库克隆到本地计算机
  • npm install-加载/安装node_modules
  • gulp lint-验证代码并产生CI结果。 (您选择的短绒棉)
  • gulp test-运行服务器端和客户端单元测试,为每个
  • 生成代码覆盖CI结果
  • gulp build_web_client-使用webpack API调用构建客户端Web项目。这将在项目
  • 下创建一个名为“dist”的目录。
  • gulp build_electron_app-使用electron-packager API构建Electron可执行文件。这将在项目下创建一个名为“edist”的目录。
  • cd Installer
  • buildMSI.bat-此Windows批处理脚本应执行以下步骤:
  • 使用Wix命令heat.exe
  • 来收集/edist目录的内容列表(在上面的目录树结构中看到,并由步骤6创建),从而准备 list 文件(生成.wxs文件)。
  • 使用Wix命令candle.exe
  • 对项目进行预处理并将其编译为对象(.wixobj)
  • 使用Wix命令Light.exe将Wix项目链接到其最终的可安装文件格式,从而生成安装MSI文件。

  • 这只是一个建议。当然,您可以根据自己的最佳选择对每个步骤使用其他工具。这只是我发现的一种方法,可以很好地用于开发 Electron 应用程序并部署到Windows目标。这样做的好处是,使用Electron,您可以选择使用步骤1-6构建到许多目标OS,然后如果要转到Windows或Mac,Linux进行步骤7和8,则可以采用不同的部署方法。

    是的,的确如此,您可以使用electron-builder(或对于那些有简单需求的用户,使用electron-forge)通过Squirrel打包您的应用程序,作为将其部署到所有可用于 Electron 操作系统的方式(这意味着将我的第7步和第8步替换为这些打包方法) )。根据我的经验,就我们的情况而言,Squirrel解决方案用于Windows部署似乎不如使用Wix进行部署。

    对于您最初关于安装可配置性的问题,使用Wix的好处是您可以完全自定义安装UI和体验(包括目标路径)。

    关于windows - 带 Electron 链接的msi安装程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45984273/

    有关windows - 带 Electron 链接的msi安装程序的更多相关文章

    1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

      我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

    2. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

      我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

    3. ruby - 如何指定 Rack 处理程序 - 2

      Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

    4. ruby - 在 Ruby 中编写命令行实用程序 - 2

      我想用ruby​​编写一个小的命令行实用程序并将其作为gem分发。我知道安装后,Guard、Sass和Thor等某些gem可以从命令行自行运行。为了让gem像二进制文件一样可用,我需要在我的gemspec中指定什么。 最佳答案 Gem::Specification.newdo|s|...s.executable='name_of_executable'...endhttp://docs.rubygems.org/read/chapter/20 关于ruby-在Ruby中编写命令行实用程序

    5. ruby - 完全离线安装RVM - 2

      我打算为ruby​​脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn

    6. ruby-on-rails - Rails 应用程序之间的通信 - 2

      我构建了两个需要相互通信和发送文件的Rails应用程序。例如,一个Rails应用程序会发送请求以查看其他应用程序数据库中的表。然后另一个应用程序将呈现该表的json并将其发回。我还希望一个应用程序将存储在其公共(public)目录中的文本文件发送到另一个应用程序的公共(public)目录。我从来没有做过这样的事情,所以我什至不知道从哪里开始。任何帮助,将不胜感激。谢谢! 最佳答案 无论Rails是什么,几乎所有Web应用程序都有您的要求,大多数现代Web应用程序都需要相互通信。但是有一个小小的理解需要你坚持下去,网站不应直接访问彼此

    7. ruby - 无法运行 Rails 2.x 应用程序 - 2

      我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

    8. ruby-on-rails - rails 目前在重启后没有安装 - 2

      我有一个奇怪的问题:我在rvm上安装了ruby​​onrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(

    9. ruby - 如何为 emacs 安装 ruby​​-mode - 2

      我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby​​提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs

    10. ruby-on-rails - Rails 应用程序中的 Rails : How are you using application_controller. rb 是新手吗? - 2

      刚入门rails,开始慢慢理解。有人可以解释或给我一些关于在application_controller中编码的好处或时间和原因的想法吗?有哪些用例。您如何为Rails应用程序使用应用程序Controller?我不想在那里放太多代码,因为据我了解,每个请求都会调用此Controller。这是真的? 最佳答案 ApplicationController实际上是您应用程序中的每个其他Controller都将从中继承的类(尽管这不是强制性的)。我同意不要用太多代码弄乱它并保持干净整洁的态度,尽管在某些情况下ApplicationContr

    随机推荐