热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

电子电子-winstaller为Msi设置安装路径。-Electronelectron-winstallerSetInstallationPathforMsi

ImusingElectronandAngular2tocreateadesktopapplicationforWindows,andcansuccessfullyge

I'm using Electron and Angular2 to create a desktop application for Windows, and can successfully generate the .exe and .msi files for installation. I use electron-packager to package my electron app packaged electron app

我使用电子和Angular2为Windows创建一个桌面应用程序,并且可以成功地生成.exe和.msi文件来安装。我用电子包装器包装我的电子应用程序包装电子应用。

After packaging the app I use electron-winstaller to generate an msi from the package

在打包后,我使用电子winstaller从包中生成msi。

When I run the .msi file though, It automatically installs my project to C:\Users\Username\AppData\Local\ApplicationName . The only thing when double clicking on the msi is this short dialog: dialog

但是,当我运行.msi文件时,它会自动地将我的项目安装到c:) usersusernamelocal\ ApplicationName。当双击msi时,唯一的事情就是这个简短的对话框:对话框。

What I would like though, is for the installer to prompt me to where it should install the application. I want to be able to set the installation path when installing.

但是,我希望安装程序能够提示我在哪里安装应用程序。我希望在安装时能够设置安装路径。

I should also mention that I tried using electron-builder, and could also generate the msi file. But here I could also not set the installation path. I found this Electron create MSI installer using electron-builder issue where someone else had the same problem with electron-builder, but there was no answer to his question.

我还应该提到,我尝试使用电子构建器,也可以生成msi文件。但这里我也不能设置安装路径。我发现这个电子制造了MSI安装程序,它使用的是电子制造的问题,在这个问题上,其他人也有同样的问题,但他的问题没有答案。

Here is my configuration for electron-winstaller. The winstaller.js file is located at the root of my project:

这是我的电子winstaller的配置。winstaller。js文件位于我项目的根目录:

var electrOnInstaller= require('electron-winstaller');
var resultPromise = electronInstaller.createWindowsInstaller(
  {
    appDirectory: '../installer/sda-win32-x64',
    outputDirectory: '../installer',
    authors: 'SORA Desktop Application',
    exe: 'sda.exe',
    setupExe: 'SDASetup.exe',
    setupMsi: 'SDASetup.msi',
    iconUrl: 'file:///d/dev/sda/client/src/app/assets/images/icon.ico',
    setupIcon: 'src/app/assets/images/icon.ico'
  });

resultPromise.then(() => console.log('It worked!'), e => console.log(`No dice: ${e.message}`));

Here is my package.json configuration. This is also located at the root of my project

这是我的包。json配置。这也是我项目的根。

{
  "name": "sda",
  "description": "SDA 3.0",
  "version": "0.0.1",
  "main": "gulpfile.js",
  "keywords": [
    "Angular",
    "Angular2",
    "Electron",
    "Typescript"
  ],
  "author": "Vic",
  "license": "MIT",
  "scripts": {
    "build": "gulp build",
    "start": "npm run build && electron ./dist/index.js",
    "package": "npm run build && gulp electron:package",
    "postinstall": "concurrently \"bower install\" \"typings install\"",
    "appstart": "electron ./dist/index.js",
    "test": "gulp test",
    "deploy": "rm -rf ../installer && gulp setInDevelopmentFlagToFalse && cp src/app/environment/environment.prod.ts src/app/environment/environment.ts && npm run build && cd dist && electron-packager . --platform=win32 --arch=x64 --overwrite=true --out=../../installer --icon=assets/images/icon.ico && cd ../ && gulp setInDevelopmentFlagToTrue && cp src/app/environment/environment.dev.ts src/app/environment/environment.ts && node winstaller.js"
  },
  "dependencies": {
    "@angular/common": "2.0.0",
    "@angular/compiler": "2.0.0",
    "@angular/core": "2.0.0",
    "@angular/forms": "2.0.0",
    "@angular/http": "2.0.0",
    "@angular/platform-browser": "2.0.0",
    "@angular/platform-browser-dynamic": "2.0.0",
    "@angular/router": "3.0.0",
    "@angular/upgrade": "2.0.0",
    "@ng-bootstrap/ng-bootstrap": "1.0.0-alpha.8",
    "@types/hammerjs": "2.0.33",
    "@types/sjcl": "1.0.27",
    "angular2-jwt": "0.1.23",
    "angular2-moment": "1.0.0-beta.5",
    "angular2localization": "1.0.2",
    "bootstrap": "4.0.0-alpha.4",
    "core-js": "2.4.1",
    "file-saver": "1.3.3",
    "font-awesome": "4.6.3",
    "jquery": "3.1.1",
    "moment": "2.15.2",
    "normalize.css": "5.0.0",
    "reflect-metadata": "0.1.3",
    "rxjs": "5.0.0-beta.12",
    "sjcl": "1.0.6",
    "systemjs": "0.19.27",
    "tether": "1.3.7",
    "zone.js": "0.6.23"
  },
  "devDependencies": {
    "bower": "1.7.9",
    "concurrently": "2.2.0",
    "del": "2.2.0",
    "electron": "1.3.5",
    "electron-connect": "0.6.0",
    "electron-packager": "8.1.0",
    "electron-prebuilt": "1.3.8",
    "electron-winstaller": "2.3.4",
    "eslint": "3.6.0",
    "eslint-config-google": "0.6.0",
    "eslint-plugin-html": "1.5.3",
    "gulp": "3.9.1",
    "gulp-atom-electron": "1.9.0",
    "gulp-concat": "2.6.0",
    "gulp-replace": "^0.5.4",
    "gulp-sass": "2.3.1",
    "gulp-shell": "0.5.2",
    "gulp-symdest": "1.0.0",
    "gulp-typescript": "3.0.2",
    "hammerjs": "2.0.8",
    "jasmine-core": "2.5.2",
    "karma": "1.3.0",
    "karma-chrome-launcher": "2.0.0",
    "karma-cli": "1.0.1",
    "karma-htmlfile-reporter": "0.3.4",
    "karma-jasmine": "1.0.2",
    "karma-jasmine-html-reporter": "0.2.2",
    "karma-sourcemap-loader": "0.3.7",
    "karma-typescript-preprocessor": "0.3.0",
    "run-sequence": "1.1.5",
    "typescript": "2.0.2",
    "typings": "1.3.2"
  }
}

Do I maybe need a certificate ? Is it not a default setting for the windows installer to ask where to install?

我需要证书吗?它不是windows安装程序要求安装在哪里的默认设置吗?

1 个解决方案

#1


0  

electron-winstaller uses squirrel to generate the setup files. According to their documentation, the install path is "effectively immutable" and hard set to \%LocalAppData%\AppName :

电子winstaller使用squirrel来生成安装文件。根据他们的文档,安装路径是“有效不可变的”,并且很难设置为\%LocalAppData%\AppName:

Install Location

安装位置

The Setup.exe, and later the UpdateManager in MyApp must have the ability to write files to and execute files from the application install location. To ensure permission for all types of users, the user's application data directory is selected as the install location (i.e., %LocalAppData%\MyApp).

的设置。exe,然后MyApp中的UpdateManager必须能够从应用程序安装位置写入文件并执行文件。为了确保对所有类型的用户的权限,用户的应用程序数据目录被选择为安装位置(即:,% LocalAppData % \ MyApp)。

The installation root really only needs to consist of two types of folders:

安装根实际上只需要包含两种类型的文件夹:

Packages - folder used to download and assemble the update package files. App Folders - the "installed" application files for a given version of MyApp. \%LocalAppData%\MyApp \packages MyApp-1.0.0.nupkg MyApp-1.0.1-delta.nupkg MyApp-1.0.1.nupkg \app-1.0.0 MyApp.exe \app-1.0.1 MyApp.exe The packages directory is effectively immutable, it simply consists of the packages we've downloaded. Using the user's local application data directory means that we the needed write-access to the install directory on a per-user basis.

软件包-用于下载和组装更新包文件的文件夹。App文件夹-为某一版本的MyApp“安装”的应用程序文件。MyApp-1.0.0 \ % LocalAppData % \ MyApp \包。nupkg MyApp-1.0.1-delta。nupkg MyApp-1.0.1。nupkg \ app-1.0.0 MyApp。exe \ app-1.0.1 MyApp。exe包目录实际上是不可变的,它只包含我们下载的包。使用用户的本地应用程序数据目录意味着我们需要在每个用户基础上对安装目录进行写访问。

Tip: See Machine-wide Installs for more information on ensuring your application pushed to all users in an enterprise environment.

提示:请参阅机器广泛的安装,以获得关于确保您的应用程序在企业环境中向所有用户推送的更多信息。

The method for installing machine wide is to use the MSI which only triggers installation on the next user login:

安装机器宽的方法是使用MSI,它只会在下一次用户登录时触发安装:

Machine-wide Installs

改变机器安装

Squirrel's Releasify command generates an MSI file suitable for installation via Group Policy. This MSI isn't a general-purpose installer, this means that once you run the MSI, users from now on will get the app installed, on next Login.

Squirrel的Releasify命令生成一个MSI文件,适合通过组策略安装。这个MSI不是一个通用的安装程序,这意味着一旦你运行MSI,从现在开始的用户将会在下次登录时安装应用程序。

So, most normal users should continue to run the Setup.exe's generated by Releasify, but if you want to have an IT Admin Friendly version, you can hand off the MSI

因此,大多数正常用户应该继续运行安装程序。exe是由Releasify生成的,但是如果您想要一个IT管理友好的版本,您可以手动关闭MSI。

Most users of Squirrel won't have to do anything new to enable this behavior, though certain NuGet package IDs / names might cause problems with MSI.

大多数Squirrel用户不需要做任何新的操作来启用这种行为,尽管某些NuGet包id /名称可能会导致MSI出现问题。


推荐阅读
  • 基于Node.js、Express、MongoDB和Socket.io的实时聊天应用开发
    本文详细介绍了使用Node.js、Express、MongoDB和Socket.io构建的实时聊天应用程序。涵盖项目结构、技术栈选择及关键依赖项的配置。 ... [详细]
  • 解决Anaconda安装TensorFlow时遇到的TensorBoard版本问题
    本文介绍了在使用Anaconda安装TensorFlow时遇到的“Could not find a version that satisfies the requirement tensorboard”错误,并提供详细的解决方案,包括创建虚拟环境和配置PyCharm项目。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • 微信小程序中实现位置获取的全面指南
    本文详细介绍了如何在微信小程序中实现地理位置的获取,包括通过微信官方API和腾讯地图API两种方式。文中不仅涵盖了必要的准备工作,如申请开发者密钥、下载并配置SDK等,还提供了处理用户授权及位置信息获取的具体代码示例。 ... [详细]
  • 本文介绍了如何在多线程环境中实现异步任务的事务控制,确保任务执行的一致性和可靠性。通过使用计数器和异常标记字段,系统能够准确判断所有异步线程的执行结果,并根据结果决定是否回滚或提交事务。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • CentOS 6.8 上安装 Oracle 10.2.0.1 的常见问题及解决方案
    本文记录了在 CentOS 6.8 系统上安装 Oracle 10.2.0.1 数据库时遇到的问题及解决方法,包括依赖库缺失、操作系统版本不兼容、用户权限不足等问题。 ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • 探讨如何利用Electron框架,通过拖动HTML元素(如音乐列表项)到桌面来实现本地文件的复制。 ... [详细]
  • 探讨了如何解决Ajax请求响应时间过长的问题。本文分析了一个从服务器获取少量数据的Ajax请求,尽管服务器已经对JSON响应进行了缓存,但实际响应时间仍然不稳定。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
author-avatar
中国有程序猿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有