electron-archive / grunt-electron-installer Goto Github PK
View Code? Open in Web Editor NEWGrunt plugin to build Windows installers for Electron apps
License: MIT License
Grunt plugin to build Windows installers for Electron apps
License: MIT License
I was wondering if it would there would be any appetite (assuming its technically feasible) to specify a different gif for installing and uninstalling?
Why is the task not finding the exe file in the appDirectory? The exe DOES exist in the appDirectory ../bin/app/win32/atom-shell/resources/app
.
It fails with this message:
$ grunt
...
Running "create-windows-installer" task
>>File not found: 'MyAtomShellApp.exe'.
Warning: Command failed: File not found: 'MyAtomShellApp.exe'.
...
Aborted due to warnings
Here are my files:
package.json:
{
"name": "MyAtomShellApp",
"version": "1.0.0",
"description": "...",
"main": "index.js",
"author": "...",
"license": "ISC",
"devDependencies": {
"grunt": "^0.4.5",
"grunt-atom-shell-app-builder": "0.0.7",
"grunt-atom-shell-installer": "^0.13.1",
}
Gruntfile.coffee:
module.exports = (grunt) ->
grunt.initConfig
'build-atom-shell-app':
options:
cache_dir: '../bin/atom'
app_dir: './'
build_dir: '../bin/app'
platforms: ['linux64', 'win32']
'create-windows-installer':
appDirectory: '../bin/app/win32/atom-shell/resources/app'
outputDirectory: '../bin/installer/'
authors: '...'
grunt.loadNpmTasks 'grunt-atom-shell-app-builder'
grunt.loadNpmTasks 'grunt-atom-shell-installer'
grunt.registerTask 'default', [
'build-atom-shell-app',
'create-windows-installer'
]
My app has this folder structure:
bin/
src/
index.js
package.json
Gruntfile.coffee
With a configuration like this:
opts =
'create-windows-installer':
appDirectory: './app'
outputDirectory: './releases'
remoteReleases: 'http://127.0.0.1:3000'
You can see requests for the RELEASES file and corresponding packages coming with an extra '/'. Example logs from my Express server:
GET //RELEASES 200 1.470 ms - -
GET //RELEASES 200 1.128 ms - -
So note the full URL being requested is _http://127.0.0.1:3000//RELEASES_.
I can fudge it this Express server but if I change remoteReleases to an S3 bucket, it'll obviously not work and return 404 when requesting the RELEASES file.
This appears on current version 0.33.
My configuration:
'create-windows-installer': {
appDirectory: _path.join('C:', 'projects', 'desktop', 'build', 'releases', 'win32', 'ia32', 'HackHands-win32'),
outputDirectory: _path.join('C:', 'projects', 'desktop'),
authors: 'HackHands',
setupIcon: _path.join('C:', 'projects', 'desktop', 'fixtures', 'icon.ico'),
remoteReleases: 'http://desktop.hackhands.com.s3-website-us-west-1.amazonaws.com/win/'+channel,
loadingGif: _path.join('C:', 'projects', 'desktop', 'fixtures', 'hh-logo-process.gif')
//exe: 'HackhandsSetp.exe'
},
And the output:
[00:02:56] grunt installer --verbose
[00:02:56] �[4mInitializing�[24m
[00:02:56] Command-line options: �[36m--verbose�[39m
[00:02:56]
[00:02:56] Reading "Gruntfile.js" Gruntfile...�[32mOK�[39m
[00:02:56]
[00:02:56] �[1mRegistering Gruntfile tasks.�[22m
[00:02:56] Channel: nightly
[00:02:56]
[00:02:56] �[1mRegistering "grunt-aws" local Npm module tasks.�[22m
[00:02:56] Reading C:\projects\desktop\node_modules\grunt-aws\package.json...�[32mOK�[39m
[00:02:56] Parsing C:\projects\desktop\node_modules\grunt-aws\package.json...�[32mOK�[39m
[00:02:56]
[00:02:56] �[1mRegistering "C:\projects\desktop\node_modules\grunt-aws\tasks\services" tasks.�[22m
[00:02:56] Loading "cloudfront.js" tasks...�[32mOK�[39m
[00:02:56] + �[36mcloudfront�[39m
[00:02:56] Loading "route53.js" tasks...�[32mOK�[39m
[00:02:56] + �[36mroute53�[39m
[00:02:56] Loading "s3.js" tasks...�[32mOK�[39m
[00:02:56] + �[36ms3�[39m
[00:02:56] Loading "aws.js" tasks...�[32mOK�[39m
[00:02:56] �[31m>> �[39mNo tasks were registered or unregistered.
[00:02:56] Loading "cache-mgr.js" tasks...�[32mOK�[39m
[00:02:56] �[31m>> �[39mNo tasks were registered or unregistered.
[00:02:56]
[00:02:56] �[1mRegistering "grunt-contrib-clean" local Npm module tasks.�[22m
[00:02:56] Reading C:\projects\desktop\node_modules\grunt-contrib-clean\package.json...�[32mOK�[39m
[00:02:56] Parsing C:\projects\desktop\node_modules\grunt-contrib-clean\package.json...�[32mOK�[39m
[00:02:56] Loading "clean.js" tasks...�[32mOK�[39m
[00:02:56] + �[36mclean�[39m
[00:02:56]
[00:02:56] �[1mRegistering "grunt-contrib-coffee" local Npm module tasks.�[22m
[00:02:56] Reading C:\projects\desktop\node_modules\grunt-contrib-coffee\package.json...�[32mOK�[39m
[00:02:56] Parsing C:\projects\desktop\node_modules\grunt-contrib-coffee\package.json...�[32mOK�[39m
[00:02:56] Loading "coffee.js" tasks...�[32mOK�[39m
[00:02:56] + �[36mcoffee�[39m
[00:02:56]
[00:02:56] �[1mRegistering "grunt-contrib-compress" local Npm module tasks.�[22m
[00:02:56] Reading C:\projects\desktop\node_modules\grunt-contrib-compress\package.json...�[32mOK�[39m
[00:02:56] Parsing C:\projects\desktop\node_modules\grunt-contrib-compress\package.json...�[32mOK�[39m
[00:02:56] Loading "compress.js" tasks...�[32mOK�[39m
[00:02:56] + �[36mcompress�[39m
[00:02:56]
[00:02:56] �[1mRegistering "grunt-contrib-copy" local Npm module tasks.�[22m
[00:02:56] Reading C:\projects\desktop\node_modules\grunt-contrib-copy\package.json...�[32mOK�[39m
[00:02:56] Parsing C:\projects\desktop\node_modules\grunt-contrib-copy\package.json...�[32mOK�[39m
[00:02:56] Loading "copy.js" tasks...�[32mOK�[39m
[00:02:56] + �[36mcopy�[39m
[00:02:56]
[00:02:56] �[1mRegistering "grunt-contrib-less" local Npm module tasks.�[22m
[00:02:56] Reading C:\projects\desktop\node_modules\grunt-contrib-less\package.json...�[32mOK�[39m
[00:02:56] Parsing C:\projects\desktop\node_modules\grunt-contrib-less\package.json...�[32mOK�[39m
[00:02:57] Loading "less.js" tasks...�[32mOK�[39m
[00:02:57] + �[36mless�[39m
[00:02:57]
[00:02:57] �[1mRegistering "grunt-contrib-sass" local Npm module tasks.�[22m
[00:02:57] Reading C:\projects\desktop\node_modules\grunt-contrib-sass\package.json...�[32mOK�[39m
[00:02:57] Parsing C:\projects\desktop\node_modules\grunt-contrib-sass\package.json...�[32mOK�[39m
[00:02:57] Loading "sass.js" tasks...�[32mOK�[39m
[00:02:57] + �[36msass�[39m
[00:02:57]
[00:02:57] �[1mRegistering "grunt-contrib-watch" local Npm module tasks.�[22m
[00:02:57] Reading C:\projects\desktop\node_modules\grunt-contrib-watch\package.json...�[32mOK�[39m
[00:02:57] Parsing C:\projects\desktop\node_modules\grunt-contrib-watch\package.json...�[32mOK�[39m
[00:02:57] Loading "watch.js" tasks...�[32mOK�[39m
[00:02:57] + �[36mwatch�[39m
[00:02:57]
[00:02:57] �[1mRegistering "grunt-electron" local Npm module tasks.�[22m
[00:02:57] Reading C:\projects\desktop\node_modules\grunt-electron\package.json...�[32mOK�[39m
[00:02:57] Parsing C:\projects\desktop\node_modules\grunt-electron\package.json...�[32mOK�[39m
[00:02:57] Loading "electron.js" tasks...�[32mOK�[39m
[00:02:57] + �[36melectron�[39m
[00:02:57]
[00:02:57] �[1mRegistering "grunt-electron-installer" local Npm module tasks.�[22m
[00:02:57] Reading C:\projects\desktop\node_modules\grunt-electron-installer\package.json...�[32mOK�[39m
[00:02:57] Parsing C:\projects\desktop\node_modules\grunt-electron-installer\package.json...�[32mOK�[39m
[00:02:57] Loading "index.js" tasks...�[32mOK�[39m
[00:02:57] + �[36mcreate-windows-installer�[39m
[00:02:57]
[00:02:57] �[1mRegistering "grunt-mkdir" local Npm module tasks.�[22m
[00:02:57] Reading C:\projects\desktop\node_modules\grunt-mkdir\package.json...�[32mOK�[39m
[00:02:57] Parsing C:\projects\desktop\node_modules\grunt-mkdir\package.json...�[32mOK�[39m
[00:02:57] Loading "mkdir.js" tasks...�[32mOK�[39m
[00:02:57] + �[36mmkdir�[39m
[00:02:57]
[00:02:57] �[1mRegistering "grunt-shell" local Npm module tasks.�[22m
[00:02:57] Reading C:\projects\desktop\node_modules\grunt-shell\package.json...�[32mOK�[39m
[00:02:57] Parsing C:\projects\desktop\node_modules\grunt-shell\package.json...�[32mOK�[39m
[00:02:57] Loading "shell.js" tasks...�[32mOK�[39m
[00:02:57] + �[36mshell�[39m
[00:02:57]
[00:02:57] �[1mRegistering "tasks" tasks.�[22m
[00:02:57] Loading "install-task.coffee" tasks...�[32mOK�[39m
[00:02:57] + �[36minstall�[39m
[00:02:57] Loading "install-task.js" tasks...�[32mOK�[39m
[00:02:57] + �[36minstall�[39m
[00:02:57] Loading "mkdeb-task.coffee" tasks...�[32mOK�[39m
[00:02:57] + �[36mmkdeb�[39m
[00:02:57] Loading "mkdeb-task.js" tasks...�[32mOK�[39m
[00:02:57] + �[36mmkdeb�[39m
[00:02:57] Loading "mkrpm-task.coffee" tasks...�[32mOK�[39m
[00:02:57] + �[36mmkrpm�[39m
[00:02:57] Loading "mkrpm-task.js" tasks...�[32mOK�[39m
[00:02:57] + �[36mmkrpm�[39m
[00:02:57] Loading "task-helpers.coffee" tasks...�[32mOK�[39m
[00:02:57] �[31m>> �[39mNo tasks were registered or unregistered.
[00:02:57] Loading "task-helpers.js" tasks...�[32mOK�[39m
[00:02:57] �[31m>> �[39mNo tasks were registered or unregistered.
[00:02:57] Initializing config...�[32mOK�[39m
[00:02:57] Loading "Gruntfile.js" tasks...�[32mOK�[39m
[00:02:57] + �[36mbuild�[39m, �[36mcompile�[39m, �[36mdist�[39m, �[36mdist-linux�[39m, �[36mdist-mac�[39m, �[36minstaller�[39m, �[36minstaller-beta�[39m, �[36minstaller-stable�[39m, �[36mlinux-generic�[39m, �[36mrelease-mac�[39m
[00:02:57]
[00:02:57] Running tasks: �[36minstaller�[39m
[00:02:57]
[00:02:57] �[4mRunning "installer" task�[24m
[00:02:57]
[00:02:57] �[4mRunning "create-windows-installer" task�[24m
[00:02:57]
[00:02:57] �[4mRunning "create-windows-installer:appDirectory" (create-windows-installer) task�[24m
[00:02:57] Verifying property �[36mcreate-windows-installer.appDirectory�[39m exists in config...�[32mOK�[39m
[00:02:57] Files: �[36mC:/projects/desktop/build/releases/win32/ia32/HackHands-win32�[39m -> �[36mappDirectory�[39m
[00:02:57] Verifying property �[36mcreate-windows-installer.appDirectory.appDirectory�[39m exists in config...�[32mOK�[39m
[00:02:57] �[33mWarning: Arguments to path.resolve must be strings� Use --force to continue.�[39m
[00:02:57]
[00:02:57] �[31mAborted due to warnings.�[39m
[00:02:57] Command exited with code 3
The task is creating my installers fine, and the installers work, however the shortcuts are not getting added in the right spots so I can only run the app by going through the AppData and launching it from there.
I'm using windows 8.1
If I run the task, everything works fine. The *.nupkg, the RELEASES and the Setup.exe are generated.
But if I run Setup.exe, the gif pops up for some seconds and then disappears again. So, nothing actually happens.
If I run it from the console no output is generated.
This is the output while the task is running:
Running "create-windows-installer" task
Verifying property create-windows-installer.appDirectory exists in config...OK
Reading D:\test\node_modules\grunt-atom-shell-installer\vendor\Update.exe...OK
Writing D:\atom-shell\out\Release\Update.exe...OK
Reading D:\test\node_modules\grunt-atom-shell-installer\template.nuspec...OK
Writing C:\Users\trixt\AppData\Local\Temp\squirrel-installer-115226-712-rsrv7z\test.nuspec...OK
What am I doing wrong? I am running this on Windows 10 x64 Technical Preview and the newest Node JS version.
-Trixt0r
I met a problem.
I used a section of code call another web program interface,it works normally in web browser.
In client, it has no effect,it doesn't work.
Is there one or more way that could call the browser or other program?
Is there a way to create a single installer file instead of three file shipping to users?
Trying to create an electron build. This is the error I get from grunt:
Running "create-windows-installer:ia32" (create-windows-installer) task
>> System.IO.IOException: The process cannot access the file 'C:\tmp\installer32
\sling-bridge.0.1.0.nupkg' because it is being used by another process.
>> at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
>> at System.IO.File.InternalDelete(String path, Boolean checkHost)
>> at System.IO.File.Delete(String path)
>> at Squirrel.Update.Program.Releasify(String package, String targetDir, Str
ing packagesDir, String bootstrapperExe, String backgroundGif, String signingOpt
s, String baseUrl, String setupIcon)
>> at Squirrel.Update.Program.executeCommandLine(String[] args)
>> at Squirrel.Update.Program.main(String[] args)
>> at Squirrel.Update.Program.Main(String[] args)
Warning: Command failed: C:\Users\Sling\app\node_modules\grunt-electron-installe
r\vendor\Update.com --releasify C:\Users\Sling\AppData\Local\Temp\squirrel-insta
ller-115727-2100-1hk65vl\sling-bridge.0.1.0.nupkg --releaseDir C:\tmp\installer3
2 --loadingGif C:\Users\Sling\app\node_modules\grunt-electron-installer\resource
s\install-spinner.gif
System.IO.IOException: The process cannot access the file 'C:\tmp\installer32\sl
ing-bridge.0.1.0.nupkg' because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.File.InternalDelete(String path, Boolean checkHost)
at System.IO.File.Delete(String path)
at Squirrel.Update.Program.Releasify(String package, String targetDir, String
packagesDir, String bootstrapperExe, String backgroundGif, String signingOpts,
String baseUrl, String setupIcon)
at Squirrel.Update.Program.executeCommandLine(String[] args)
at Squirrel.Update.Program.main(String[] args)
at Squirrel.Update.Program.Main(String[] args)
Use --force to continue.
Aborted due to warnings.
I have double and triple checked and there is no process running that could be the cause of this (at least not before running grunt)
Any ideas?
I noticed that Squirrel Windows has an API to ask for updates, using grunt-electron-installer there's a way to check for updates? Case not, with which frequency Squirrel will ask for updates?
Thank you!
When I try to npm install --save-dev grunt-atom-shell-installer
, my Symantec virus scanner quarantines vendor/Setup.exe as containing "Yontoo.C". See: http://www.symantec.com/security_response/writeup.jsp?docid=2014-040317-4040-99
I use remoteReleases in grunt config but nothing happens.
then i try call SyncReleases.exe directly
C:\Users\11399\Documents\GitHub\maotama\node_modules\grunt-electron-installer\vendor\SyncReleases.exe -u https://github.com/mycard/maotama-win32 -r C:\Users\11399\Documents\GitHub\maotama\release
and then i only got a empty RELEASE file.
the repo: https://github.com/mycard/maotama-win32
There is --no-msi
option in Update.exe
and if it's already working it would be nice to add it to the README.md
.
I'd like to be able to sign with a key already installed on our build machine, which requires a different set of arguments than certificateFile
and certificatePassword
arguments can account for.
Any objections to adding a signWithParams
argument that just gets passed through to squirrel? Should I deprecate and/or remove certificateFile
and certificatePassword
at the same time?
The alternative for me would be adding keystoreName
and certificateName
arguments (corresponding to /s
and /n
arguments to signtool.exe
, respectively).
Preferences?
How to attach release notes? Do we have this feature now? Though it says release notes is not available for windows in electron's autoUpater docs, but I do find the code in electron's repo which get release notes from a json outputed by Squirrel.Windows at this line:
{releaseNotes, version} = update
and I find following lines seems like a test file (Sorry I'm not sure because I have no previous knowledge on Windows development) in Squirrel.Windows:
<releaseNotes>
## Release Notes for 1.1
1. Did some cool stuff
1. Did another thing
1. Did a third thing, pretty crazy!
Make *sure* to refrobulate the confabulator or **terrible things will happen!**
</releaseNotes>
So, if we don't support attach release notes for updates yet, is it possible to add a releaseNotes field to template.nuspec at root folder of this repo and replace its content when building a NuGet package? Or it has already supported this but I can't find that?
After installation, there are 2 files -- <installation_dir>\Update.exe
and <installation_dir>\app-x.y.z\squirrel.exe
-- installed, and seems the same.
Why both of them exist? which one can be executed by my app (I want to use it to create shortcuts)? Are they guaranteed to exist in future versions of grunt-electron-installer?
i run grunt create-windows-installer
after a couple of minutes it says Done, without errors
but when i go to the output folder, there are the normal three files as expected, the RELEASES, .nupkg and .exe
when i execute the setup.exe file, it shows an error dialog saying:
This is a dummy update,exe, if you are seeing this, your build did not correctly replace the IDR_UPDATE_ZIP resource.
Command Line: '--install.'
i don´t know if this is really an issue or i missing something obvious, but i´m kind of noob at this and i don´t know where else ask for a little help
this is my task config:
'create-windows-installer': {
x64: {
appDirectory: '/Portafolio/PortafolioSinapsis-win32-x64',
outputDirectory: '/build/installer64',
authors: 'Sinapsis-innovation',
remoteReleases: 'https://github.com/Sinapsis-Innovation/Portafolio-Sinapsis',
exe: 'PortafolioSinapsis.exe'
}
},
Thanks for your help
Does this happens to anyone else? The icon on Desktop and in the Taskbar are appearing correctly after installation, but sometimes after a few updates they are disappearing an showing the empty file icon.
When I run grunt create-windows-installer
I receive the following error:
Running "create-windows-installer:x64" (create-windows-installer) task Warning: Unable to read "F:\app\build\my-app-64\resources\app\package.json" file (Error code: ENOENT). Use --force to continue.
Here is my Gruntfile.js...
module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-electron-installer');
grunt.initConfig({
'create-windows-installer': {
x64: {
appDirectory: 'build/my-app-64',
outputDirectory: 'build/installer64',
authors: 'My Company',
exe: 'myapp.exe'
},
ia32: {
appDirectory: 'build/my-app-32',
outputDirectory: 'build/installer32',
authors: 'My Company',
exe: 'myapp.exe'
}
},
'clean': [ "build" ]
});
}
I'm a little confused as to why this this task is trying to find package.json
in resources\app
? I don't actually have a resources directory. My package.json
file sits beside my Gruntfile.js
in F:\app
.
Thanks for any help :)
setupIcon
does accept a local .ico file, is there any reason why it can't be the same for iconUrl
(which should just be named icon
then)?
Hi,
I'm developing a windows application with electron, everything works fine but when I try update the app with the electron auto-updater module I receive a error "Squirrel not found".
What i'm missing?
Is possible use electron auto-updater module with this package?
Hi guys,
There's any possibility to integrate grunt-electron-installer with some Continuous Integration service for Continuous Delivery purposes?
Thank you.
Hi,
I can't install this module on MS 2012 server. I am getting this following error
MSBUILD : error MSB4132: The tools version "2.0" is unrecognized. Available tools versions are "4.0".
gyp ERR! build error
gyp ERR! stack Error: `C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe` failed with exit code: 1
gyp ERR! stack at ChildProcess.onExit (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\build.js:2
69:23)
gyp ERR! stack at ChildProcess.emit (events.js:110:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:1074:12)
gyp ERR! System Windows_NT 6.3.9600
gyp ERR! command "node" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuil
d"
gyp ERR! cwd C:\pocketworks\Fresenius-pc\node_modules\grunt-electron-installer\node_modules\asar\node_modules\chromium-p
ickle
gyp ERR! node -v v0.12.3
gyp ERR! node-gyp -v v1.0.3
gyp ERR! not ok
npm ERR! Windows_NT 6.3.9600
npm ERR! argv "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "i
nstall"
npm ERR! node v0.12.3
npm ERR! npm v2.9.1
npm ERR! code ELIFECYCLE
Is this anyway related to dotnet version..??
When installing the generated setup file, an atom-shell .ico file is placed in ./AppData/Local/myapp/app.ico
. This icon is displayed in add remove programs (and maybe other places?).
I can't find any way to change this.
Browsing the source I found the undocumented iconUrl
option, it defaults to the atom-shell icon. However, this option in the gruntfile has no result on the installed .ico file. I've tried absolute, relative, and public web url values with no luck.
'create-windows-installer': {
appDirectory: 'dist/windows/build',
outputDirectory: 'dist/windows/installer',
iconUrl: '../resources/windows/myapp.ico',
setupIcon: '../resources/windows/myapp.ico',
certificateFile: '../resources/windows/cert.p12',
certificatePassword: 'xxxxxxxx',
loadingGif: '../resources/windows/installer.gif'
}
first I had a problem with python 3.4.2. I removed that version and installed 2.7.9.
But now I'm having this error:
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB 8020: The build tools for Visual Studio 2010 (Platform Toolset = 'v100') cannot be found. To build usi ng the v100 build tools, please install Visual Studio 2010 build tools. Alternatively, you may upgrad e to the current Visual Studio tools by selecting the Project menu or right-click the solution, and th en selecting "Upgrade Solution...". [c:\git\gh\hello-atom\build\node_modules\grunt-atom-shell-installe r\node_modules\asar\node_modules\chromium-pickle\node_modules\native-mate\vendor\base-minimal\base.vcx proj]
C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.Cpp.Platform.targets(64,5): error MSB 8020: The build tools for Visual Studio 2010 (Platform Toolset = 'v100') cannot be found. To build usi ng the v100 build tools, please install Visual Studio 2010 build tools. Alternatively, you may upgrad e to the current Visual Studio tools by selecting the Project menu or right-click the solution, and th en selecting "Upgrade Solution...". [c:\git\gh\hello-atom\build\node_modules\grunt-atom-shell-installe r\node_modules\asar\node_modules\chromium-pickle\node_modules\native-mate\native_mate.vcxproj]
I get this when I try to run this Grunt task:
Running "create-windows-installer:x64" (create-windows-installer) task
>> File not found: 'LICENSE'.
Warning: Command failed: C:\Users\ollie\_TEMP\cc_build\gruntit\node_modules\grun
t-electron-installer\vendor\nuget.exe pack C:\Users\ollie\AppData\Local\Temp\squ
irrel-installer-115717-9376-72k146\CC-editor2.nuspec -BasePath C:\Users\ollie\_T
EMP\cc_build\electron\out\R -OutputDirectory C:\Users\ollie\AppData\Local\Temp\s
quirrel-installer-115717-9376-72k146 -NoDefaultExcludes
File not found: 'LICENSE'.
Use --force to continue.
Aborted due to warnings.
I tried grunt --force
but that didn't seem to help. The task just ended and did not produce an installer.
I made sure I had a "license" field in my app's package.json, and I even added files LICENSE
, LICENSE.md
, LICENSE.txt
in the same directory as my app's package.json. None of these things have allowed to me to get past this error.
What am I missing? Thanks.
So we're trying to build prerelease versions with names like 3.2.1-RC4
, but nuget semver is throwing weird errors where it strips out most of the version number.
Running "create-windows-installer:latest" (create-windows-installer) task
>> System.ArgumentException: '4' is not a valid version string.
>> Parameter name: version
>> at NuGet.SemanticVersion.Parse(String version)
>> at Squirrel.VersionExtensions.ToSemanticVersion(String fileName)
>> at Squirrel.ReleaseEntry.<WriteReleaseFile>b__6(ReleaseEntry x)
>> at System.Linq.EnumerableSorter`2.ComputeKeys(TElement[] elements, Int32 count)
>> at System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count)
>> at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext()
>> at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
>> at System.String.Join(String separator, IEnumerable`1 values)
>> at Squirrel.ReleaseEntry.WriteReleaseFile(IEnumerable`1 releaseEntries, Stream stream)
>> at Squirrel.ReleaseEntry.WriteReleaseFile(IEnumerable`1 releaseEntries, String path)
>> at Squirrel.Update.Program.Releasify(String package, String targetDir, String packagesDir, String bootstrapperExe, String backgroundGif, String signingOpts, String baseUrl, String setupIcon, Boolean generateMsi)
>> at Squirrel.Update.Program.executeCommandLine(String[] args)
>> at Squirrel.Update.Program.main(String[] args)
>> at Squirrel.Update.Program.Main(String[] args)
Warning: Command failed: C:\projects\GitKraken\build\node_modules\grunt-electron-installer\vendor\Update.com --releasify C:\Users\appveyor\AppData\Local\Temp\1\si1151024-2184-1gv97u2\gitkraken.3.2.1-RC4.nupkg --releaseDir C:
\projects\GitKraken\dist --loadingGif C:\projects\GitKraken\resources\win\installerImage.gif --signWithParams /a /f "C:\projects\GitKraken\vendor\windows_codesigning_cert.pfx" /p "asdf"
System.ArgumentException: '4' is not a valid version string.
Parameter name: version
at NuGet.SemanticVersion.Parse(String version)
at Squirrel.VersionExtensions.ToSemanticVersion(String fileName)
at Squirrel.ReleaseEntry.<WriteReleaseFile>b__6(ReleaseEntry x)
at System.Linq.EnumerableSorter`2.ComputeKeys(TElement[] elements, Int32 count)
at System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count)
at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__0.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.String.Join(String separator, IEnumerable`1 values)
at Squirrel.ReleaseEntry.WriteReleaseFile(IEnumerable`1 releaseEntries, Stream stream)
at Squirrel.ReleaseEntry.WriteReleaseFile(IEnumerable`1 releaseEntries, String path)
at Squirrel.Update.Program.Releasify(String package, String targetDir, String packagesDir, String bootstrapperExe, String backgroundGif, String signingOpts, String baseUrl, String setupIcon, Boolean generateMsi)
at Squirrel.Update.Program.executeCommandLine(String[] args)
at Squirrel.Update.Program.main(String[] args)
at Squirrel.Update.Program.Main(String[] args)
Use --force to continue.
Aborted due to warnings.
Now, in nuget's semver specs it says soemthing like 3.2.1-RC.4
is not allowed, but something without the period in the component after the -
is. This module is even splitting on that -
, and removing all of the periods in the tailing component of the version to match that. It appears however that they're somehow stripping down everything before the -, and then their semver parse is stripping off the text before numbers. Is this a known issue (with nuget, squirrel, grunt-electron-installer, or commonly in end-user code)?
I have an app that it's on version 0.1.112 all was fine until i updated to latest version, the instaler generated App-0.1.112-full.nupkg (older version) for newest version is generating App-0.1112-full.nupkg and this is because of this line
metadata.version = metadata.version.replace(/.(\d+)$/, '$1');
When the app is already installed and the user tries to run the installer again, nothing happens. This has been confusing for a few of the testers in our app.
Could the installer display a dialog to let them know it's already installed or even just launch the app?
Or is it possible to handle this ourselves within the squirrel events handles?
Upon running "grunt create-windows-installer" I get the following error:
Running "create-windows-installer:x64" (create-windows-installer) task
>> System.IO.IOException: The process cannot access the file 'C:\temp\output\Nin
jaTerm.0.1.0.nupkg' because it is being used by another process.
>> at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
>> at System.IO.File.InternalDelete(String path, Boolean checkHost)
>> at System.IO.File.Delete(String path)
>> at Squirrel.Update.Program.Releasify(String package, String targetDir, Str
ing packagesDir, String bootstrapperExe, String backgroundGif, String signingOpt
s, String baseUrl, String setupIcon)
>> at Squirrel.Update.Program.executeCommandLine(String[] args)
>> at Squirrel.Update.Program.main(String[] args)
>> at Squirrel.Update.Program.Main(String[] args)
I have made sure the output directory is not in any cloud-syncing folder, and even run the command-line in administrator mode but no luck. I have tried putting the output file somewhere completely different on my computer but that didn't work either.
I am running Windows 8 64-bit.
I'm trying to build a Windows installer in W10 but it keeps breaking when nuget.exe is called. The paths shown are correct. The .nuspect file is present and its xml content looks fine.
I tried updating nuget.exe to the latest version and using admin rights, but no luck.
I have not idea what the problem is, any suggestions?
The Copyright string in the installer exe details is "Copyright (C) 2014" and appears it can't be edited unless using rcedit after the installer is generated.
I'd suggest using the package.json "license" value like it does with other details for the installer executable.
Hi, I'm still wondering, if grunt-electron-installer the recommended way to build installer?
I'm using the installer version 1.1.0 and as the docs say the app should run with squirrel-events as arguments but I only get the --squirrel-first-run flag, the install, updated, obsolete or uninstall are not getting fired at any time, even thou i´m able to update my app using the autoUpdater.
Versions are:
Build in Windows 10 x64
Any help is much appreciated.
The installer works perfectly, but when we try to pin the app in the taskbar it creates a new icon and it is not exactly the right behaviour. Is there anything we can do about this?
Hello! I was trying to create an installer for a test Electron app on my Windows 7 (x64) machine but I got this strange error... It seems like a file already exists but it's not clear in the stack trace which file is causing the problem.
Warning: Command failed: D:\projects\test\node_modules\grunt-electron-installer\vendor\Update.com --releasify C:\Users\Emanuele\AppData\Local\Temp\squirrel-installer-11544-8492-1akav9f\test.1.0.0.nupkg --releaseDir D:\projects\test\build\installer --loadingGif D:\projects\test\node_modules\grunt-electron-installer\resources\install-spinner.gif
System.AggregateException: One or more errors occurred. ---> System.IO.IOException: Existing file.
in System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
in System.IO.__Error.WinIOError()
in System.IO.Path.InternalGetTempFileName(Boolean checkHost)
in Squirrel.Update.Program.<createSetupEmbeddedZip>d__8b.MoveNext() in c:\Users\Paul\code\squirrel\squirrel.windows\src\Update\Program.cs:riga 505
--- End of inner exception stack trace ---
in System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
in System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
in System.Threading.Tasks.Task`1.get_Result()
in Squirrel.Update.Program.Releasify(String package, String targetDir, String packagesDir, String bootstrapperExe, String backgroundGif, String signingOpts, String baseUrl, String setupIcon) in c:\Users\Paul\code\squirrel\squirrel.windows\src\Update\Program.cs:riga 354
in Squirrel.Update.Program.main(String[] args) in c:\Users\Paul\code\squirrel\squirrel.windows\src\Update\Program.cs:riga 145
in Squirrel.Update.Program.Main(String[] args) in c:\Users\Paul\code\squirrel\squirrel.windows\src\Update\Program.cs:riga 36
---> (Inner exception 0) System.IO.IOException: Existing file.
in System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
in System.IO.__Error.WinIOError()
in System.IO.Path.InternalGetTempFileName(Boolean checkHost)
in Squirrel.Update.Program.<createSetupEmbeddedZip>d__8b.MoveNext() in c:\Users\Paul\code\squirrel\squirrel.windows\src\Update\Program.cs:riga 505<---
Use --force to continue.
Aborted due to warnings.
Can someone point in the right direction?
I've built the installer and I'm able to run the app, I just can't figure out how to create the shortcuts.
It seems the code will go in the squirrelCommand switch in my main .js file, can anyone show me an example?
Thanks!
calling npm install grunt-atom-shell-installer --save-dev
Windows 8.1
nstaller\node_modules\asar\node_modules\chromium-pickle
> node-gyp rebuild
E:\Projects\test\node_modules\grunt-atom-shell-installer\node_modules\asar\node_modules\chromium-pickle>node "c:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild
gyp ERR! configure error
gyp ERR! stack Error: spawn ENOENT
gyp ERR! stack at exports._errnoException (util.js:742:11)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:1028:32)
gyp ERR! stack at child_process.js:1109:20
gyp ERR! stack at process._tickCallback (node.js:343:11)
gyp ERR! System Windows_NT 6.2.9200
gyp ERR! command "node" "c:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd E:\Projects\test\node_modules\grunt-atom-shell-installer\node_modules\asar\node_modules\chromium-pickle
gyp ERR! node -v v0.11.13
gyp ERR! node-gyp -v v0.13.0
gyp ERR! not ok
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is most likely a problem with the chromium-pickle package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get their info via:
npm ERR! npm owner ls chromium-pickle
npm ERR! There is likely additional logging output above.
npm ERR! System Windows_NT 6.2.9200
npm ERR! command "C:\\Program Files\\nodejs\\\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "grunt-atom-shell-installer" "--save-dev"
npm ERR! cwd E:\Projects\test
npm ERR! node -v v0.11.13
npm ERR! npm -v 1.4.9
npm ERR! code ELIFECYCLE
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! E:\Projects\test\npm-debug.log
npm ERR! not ok code 0
full log http://www.filedropper.com/npm-debug
The remoteReleases
option doesn't have any additional configuration to allow for authenticating against a private repo. Any way around this?
I have error "Description is required." After I added descriptions in package.json, everything is ok.
It's not very important, but...
When trying to run the task I keep getting the following error:
Running "create-windows-installer" task
Verifying property create-windows-installer.appDirectory exists in config...OK
Reading /Users/predixgo/Github/grunt-electron-installer/vendor/Update.exe...OK
Writing /Users/predixgo/GithubEnterprise/pg-atomshell-container/dist/pxgo-1-win/Update.exe...OK
Reading /Users/predixgo/GithubEnterprise/pg-atomshell-container/dist/pxgo-1-win/resources/app/package.json...OK
Parsing /Users/predixgo/GithubEnterprise/pg-atomshell-container/dist/pxgo-1-win/resources/app/package.json...OK
Reading /Users/predixgo/Github/grunt-electron-installer/template.nuspec...OK
Writing temp/pg-atomshell-container.nuspec...OK
Warning: spawn EACCES Use --force to continue.
Aborted due to warnings.
Any thoughts? I've tried fixing the permissions on pretty much every directory that would be touched by this task, and still no solution.
Hi guys, I created a VM to create the installer and I'm getting this error:
http://d.pr/i/1fepw
I'm not a windows expert, I searched about but can't find any solution. Could you guys help me?
I was wondering if it would be plausible to add an option for minimum install time, like for example if you wanted the install to take at minimum 20 seconds to complete.
In my scenario I have a loading gif that I would like to finish its animation run before it is closed, not end of the world if its not a quick thing to do.
I'm not sure how everyone else has been able to get theirs working, but I've been completely unable to get this going. Using Windows 7, x64, MSVS 2013 Express Desktop. When running grunt create-windows-installer
, I get the following when building the installer for my robopaint project:
>> The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
Warning: Command failed: C:\rpb\node_modules\grunt-electron-installer\vendor\nuget.exe pack C:\Users\TECHNI~1\AppData\Local\Temp\squirrel-installer-115620-7836-vbwmay\robopaint.nuspec -BasePath C:\rpb\out\Robopaint-win32
-x64 -OutputDirectory C:\Users\TECHNI~1\AppData\Local\Temp\squirrel-installer-115620-7836-vbwmay -NoDefaultExcludes
The specified path, file name, or both are too long. The fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.
Use --force to continue.
I suspec that AppData
as the temp location may be to blame for path character bloat, but wow the mere fact that there's a limit sure is annoying. I did find this:
Maximum Path Length Limitation
In the Windows API (with some exceptions discussed in the following paragraphs), the maximum length for a path is MAX_PATH, which is defined as 260 characters. A local path is structured in the following order: drive letter, colon, backslash, name components separated by backslashes, and a terminating null character. For example, the maximum path on drive D is "D:\some 256-character path string" where "" represents the invisible terminating null character for the current system codepage. (The characters < > are used here for visual clarity and cannot be part of a valid path string.)
Note File I/O functions in the Windows API convert "/" to "" as part of converting the name to an NT-style name, except when using the "?" prefix as detailed in the following sections.The Windows API has many functions that also have Unicode versions to permit an extended-length path for a maximum total path length of 32,767 characters. This type of path is composed of components separated by backslashes, each up to the value returned in the lpMaximumComponentLength parameter of the GetVolumeInformation function (this value is commonly 255 characters). To specify an extended-length path, use the "?" prefix. For example, "?\D:\very long path".
Note The maximum path of 32,767 characters is approximate, because the "?" prefix may be expanded to a longer string by the system at run time, and this expansion applies to the total length.The "?" prefix can also be used with paths constructed according to the universal naming convention (UNC). To specify such a path using UNC, use the "?\UNC" prefix. For example, "?\UNC\server\share", where "server" is the name of the computer and "share" is the name of the shared folder. These prefixes are not used as part of the path itself. They indicate that the path should be passed to the system with minimal modification, which means that you cannot use forward slashes to represent path separators, or a period to represent the current directory, or double dots to represent the parent directory. Because you cannot use the "?" prefix with a relative path, relative paths are always limited to a total of MAX_PATH characters.
Makes me think if we initiate this command with \\?\
this wouldn't be an issue? Hmm.
I've tried setting the global npm tmp
via npm config set tmp "C:\tmp"
, but it didn't seem to actually change it when the script runs. Any ideas?
So the error happens whenthe installer is still running, but it's finished copying files, and throws up the "there's been an error" type message popup. Checking the log gives
Program: Starting Squirrel Updater: --install .
Program: Starting install, writing to C:\Users\someuser\AppData\Local\SquirrelTemp
CheckForUpdateImpl: Failed to load local releases, starting from scratch: System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\someuser\AppData\Local\gitkraken\packages\RELEASES'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at Squirrel.Utility.LoadLocalReleases(String localReleaseFile)
at Squirrel.UpdateManager.CheckForUpdateImpl.<CheckForUpdate>d__28.MoveNext()
CheckForUpdateImpl: Reading RELEASES file from C:\Users\someuser\AppData\Local\SquirrelTemp
CheckForUpdateImpl: First run or local directory is corrupt, starting from scratch
ApplyReleasesImpl: Writing files to app directory: C:\Users\someuser\AppData\Local\gitkraken\app-0.0.1
ApplyReleasesImpl: Squirrel Enabled Apps: [C:\Users\someuser\AppData\Local\gitkraken\app-0.0.1\GitKraken.exe]
ApplyReleasesImpl: Couldn't run Squirrel hook, continuing: C:\Users\someuser\AppData\Local\gitkraken\app-0.0.1\GitKraken.exe: System.OperationCanceledException: The operation was canceled.
at System.Threading.CancellationToken.ThrowOperationCanceledException()
at Squirrel.Utility.<>c__DisplayClassf.<InvokeProcessAsync>b__e()
at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Squirrel.Utility.<InvokeProcessAsync>d__11.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Squirrel.UpdateManager.ApplyReleasesImpl.<>c__DisplayClassb5.<<invokePostInstall>b__a9>d__b7.MoveNext()
ApplyReleasesImpl: Starting fixPinnedExecutables
ApplyReleasesImpl: fixPinnedExecutables: oldAppDirectories is empty, this is pointless
ApplyReleasesImpl: cleanDeadVersions: for version 0.0.1
ApplyReleasesImpl: cleanDeadVersions: exclude folder app-0.0.1
Program: Starting Squirrel Updater: --install .
Program: Starting install, writing to C:\Users\someuser\AppData\Local\SquirrelTemp
CheckForUpdateImpl: Reading RELEASES file from C:\Users\someuser\AppData\Local\SquirrelTemp
ApplyReleasesImpl: No release to install, running the app
ApplyReleasesImpl: Squirrel Enabled Apps: [C:\Users\someuser\AppData\Local\gitkraken\app-0.0.1\GitKraken.exe]
Program: Starting Squirrel Updater: --install .
Program: Starting install, writing to C:\Users\someuser\AppData\Local\SquirrelTemp
CheckForUpdateImpl: Failed to load local releases, starting from scratch: System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\someuser\AppData\Local\gitkraken\packages\RELEASES'.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
at Squirrel.Utility.LoadLocalReleases(String localReleaseFile)
at Squirrel.UpdateManager.CheckForUpdateImpl.<CheckForUpdate>d__28.MoveNext()
CheckForUpdateImpl: Reading RELEASES file from C:\Users\someuser\AppData\Local\SquirrelTemp
CheckForUpdateImpl: First run or local directory is corrupt, starting from scratch
ApplyReleasesImpl: Writing files to app directory: C:\Users\someuser\AppData\Local\gitkraken\app-0.0.2
IEnableLogger: Failed to install package to app dir: System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
at System.IO.MemoryStream.set_Capacity(Int32 value)
at System.IO.MemoryStream.EnsureCapacity(Int32 value)
at System.IO.MemoryStream.Write(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.Stream.InternalCopyTo(Stream destination, Int32 bufferSize)
at System.IO.Stream.CopyTo(Stream destination)
at NuGet.StreamExtensions.ToStreamFactory(Stream stream)
at NuGet.ZipPackageFile..ctor(PackagePart part)
at NuGet.ZipPackage.<GetFilesNoCache>b__12(PackagePart part)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at NuGet.ZipPackage.GetFilesNoCache()
at NuGet.ZipPackage.GetFilesBase()
at NuGet.LocalPackage.GetFiles()
at NuGet.PackageExtensions.GetFiles(IPackage package, String directory)
at Squirrel.UpdateManager.ApplyReleasesImpl.<installPackageToAppDir>d__8e.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Squirrel.Utility.<LogIfThrows>d__54`1.MoveNext()
It seems persistent per machine, but different machines with similar ram usage might work or not work. Has anybody seen this before?
The following gruntfile should be supported
...
"create-windows-installer": {
"myfirstcfg" : {
appDirectory: "some/path",
outputDirectory: "target/path"
},
"anothercfg": {
appDirectory: "another/path",
outputDirectory: "target/other"
}
},
...
But I get the following error when i run grunt create-windows-installer:myfirstcfg
:
Required config property "create-windows-installer.appDirectory" missing
Tried to install using npm install --save-dev grunt-electron-installer
Windows 7.
npm WARN package.json [email protected] No description
npm WARN package.json [email protected] No repository field.
npm WARN package.json [email protected] No README data
npm http GET https://registry.npmjs.org/grunt-electron-installer
npm http 304 https://registry.npmjs.org/grunt-electron-installer
npm http GET https://registry.npmjs.org/grunt-electron-installer/-/grunt-electron-installe
r-0.31.0.tgz
npm http 200 https://registry.npmjs.org/grunt-electron-installer/-/grunt-electron-installe
r-0.31.0.tgz
npm ERR! Error: ENOENT, lstat 'C:\Users\Casey\AppData\Local\Temp\npm-30232- _bKAllyD\143019
5649360-0.18368915328755975\package\vendor\Setup.exe'
npm ERR! If you need help, you may report this *entire* log,
npm ERR! including the npm and node versions, at:
npm ERR! <http://github.com/isaacs/npm/issues>
npm ERR! System Windows_NT 6.1.7601
npm ERR! command "E:\\Programs\\nodejs\\\\node.exe" "E:\\Programs\\nodejs\\node_modules\\n
pm\\bin\\npm-cli.js" "i" "-S" "grunt-electron-installer" "--msvs_version=2013"
npm ERR! cwd C:\Users\Casey\Electron Apps
npm ERR! node -v v0.10.24
npm ERR! npm -v 1.3.21
npm ERR! path C:\Users\Casey\AppData\Local\Temp\npm-30232-_bKAllyD\1430195649360- 0.1836891
5328755975\package\vendor\Setup.exe
npm ERR! fstream_path C:\Users\Casey\AppData\Local\Temp\npm-30232- _bKAllyD\1430195649360-0
.18368915328755975\package\vendor\Setup.exe
npm ERR! fstream_type File
npm ERR! fstream_class FileWriter
npm ERR! code ENOENT
npm ERR! errno 34
npm ERR! fstream_stack E:\Programs\nodejs\node_modules\npm\node_modules\fstream\lib\writer
.js:284:26
npm ERR! fstream_stack Object.oncomplete (fs.js:107:15)
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! C:\Users\Casey\Electron Apps\npm-debug.log
npm ERR! not ok code 0
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.