2016-10-28 131 views
6

我正在使用Electron和Angular2为Windows创建桌面应用程序,并且可以成功生成用于安装的.exe和.msi文件。我用电子打包包装我的电子应用 packaged electron app电子电子winstaller设置msi的安装路径

打包应用程序后,我用电子winstaller从封装

产生MSI当我运行.msi文件,虽然,它会自动安装我的项目到C:\ Users \用户名\ AppData \ Local \ ApplicationName。双击msi时唯一的一点就是这个简短的对话框: dialog

我想要的是安装程序提示我应该在哪里安装应用程序。我希望能够在安装时设置安装路径。

我还应该提到,我尝试过使用电子构建器,并且还可以生成msi文件。但是在这里我也可以不设置安装路径。我发现这个Electron create MSI installer using electron-builder问题,其他人与电子建设者有同样的问题,但他的问题没有答案。

这是我为电子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}`)); 

这是我的package.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" 
    } 
} 

我可能需要证书吗? 这是不是Windows安装程序的默认设置以询问安装位置?

回答

0

electron-winstaller使用松鼠生成安装文件。根据他们的documentation,安装路径是 “不可改变的有效” 硬设置为\%LOCALAPPDATA%\ AppName的

安装位置

的setup.exe,后来UpdateManager在MyApp必须具有 才能将文件写入并执行应用程序 安装位置中的文件。为了确保所有类型的用户都有权限, 用户的应用程序数据目录被选为安装位置 (即%LocalAppData%\ MyApp)。

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

包 - 文件夹用于下载和组装更新包 文件。应用程序文件夹 - 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软件包目录是有效不可变,它只是由我们下载的软件包组成。使用用户的 本地应用程序数据目录意味着我们所需的写入访问 到每个用户的安装目录。

提示:有关确保将 应用程序推送到企业环境中的所有用户的更多信息,请参阅机器安装。

宽安装机的方法,是使用仅触发的下一个用户登录安装MSI:

机宽安装次数

松鼠的Releasify命令生成MSI文件适合通过组策略安装 。此MSI不是通用的 安装程序,这意味着一旦您运行MSI,现在的用户 将在下次登录时安装应用程序。

因此,大多数普通用户应该继续运行Setup.exe的通过Releasify产生 ,但如果你想有一个IT管理员友好的版本, 可以用手关闭MSI

松鼠的大多数深得用户尽管某些NuGet软件包ID /名称可能会导致MSI出现 问题,但无需执行任何新操作即可启用此行为。

+1

感谢您花时间回答。我们最终这样做了,但这不是我们想要的解决方案。如果安装该软件的用户可以直接选择他希望安装的目录而不是通过策略权限设置,那将会更好。 – vic