|
const {app, BrowserWindow, Menu, protocol, ipcMain} = require('electron'); |
|
const log = require('electron-log'); |
|
const {autoUpdater} = require("electron-updater"); |
|
|
|
//------------------------------------------------------------------- |
|
// Logging |
|
// |
|
// THIS SECTION IS NOT REQUIRED |
|
// |
|
// This logging setup is not required for auto-updates to work, |
|
// but it sure makes debugging easier :) |
|
//------------------------------------------------------------------- |
|
autoUpdater.logger = log; |
|
autoUpdater.logger.transports.file.level = 'info'; |
|
log.info('App starting...'); |
|
|
|
//------------------------------------------------------------------- |
|
// Define the menu |
|
// |
|
// THIS SECTION IS NOT REQUIRED |
|
//------------------------------------------------------------------- |
|
let template = [] |
|
if (process.platform === 'darwin') { |
|
// OS X |
|
const name = app.getName(); |
|
template.unshift({ |
|
label: name, |
|
submenu: [ |
|
{ |
|
label: 'About ' + name, |
|
role: 'about' |
|
}, |
|
{ |
|
label: 'Quit', |
|
accelerator: 'Command+Q', |
|
click() { app.quit(); } |
|
}, |
|
] |
|
}) |
|
} |
|
|
|
|
|
//------------------------------------------------------------------- |
|
// Open a window that displays the version |
|
// |
|
// THIS SECTION IS NOT REQUIRED |
|
// |
|
// This isn't required for auto-updates to work, but it's easier |
|
// for the app to show a window than to have to click "About" to see |
|
// that updates are working. |
|
//------------------------------------------------------------------- |
|
let win; |
|
|
|
function sendStatusToWindow(text) { |
|
log.info(text); |
|
win.webContents.send('message', text); |
|
} |
|
function createDefaultWindow() { |
|
win = new BrowserWindow(); |
|
win.webContents.openDevTools(); |
|
win.on('closed', () => { |
|
win = null; |
|
}); |
|
win.loadURL(`file://${__dirname}/version.html#v${app.getVersion()}`); |
|
return win; |
|
} |
|
autoUpdater.on('checking-for-update', () => { |
|
sendStatusToWindow('Checking for update...'); |
|
}) |
|
autoUpdater.on('update-available', (ev, info) => { |
|
sendStatusToWindow('Update available.'); |
|
}) |
|
autoUpdater.on('update-not-available', (ev, info) => { |
|
sendStatusToWindow('Update not available.'); |
|
}) |
|
autoUpdater.on('error', (ev, err) => { |
|
sendStatusToWindow('Error in auto-updater.'); |
|
}) |
|
autoUpdater.on('download-progress', (ev, progressObj) => { |
|
sendStatusToWindow('Download progress...'); |
|
}) |
|
autoUpdater.on('update-downloaded', (ev, info) => { |
|
sendStatusToWindow('Update downloaded; will install in 5 seconds'); |
|
}); |
|
app.on('ready', function() { |
|
// Create the Menu |
|
const menu = Menu.buildFromTemplate(template); |
|
Menu.setApplicationMenu(menu); |
|
|
|
createDefaultWindow(); |
|
}); |
|
app.on('window-all-closed', () => { |
|
app.quit(); |
|
}); |
|
|
|
//------------------------------------------------------------------- |
|
// Auto updates |
|
// |
|
// For details about these events, see the Wiki: |
|
// https://github.com/electron-userland/electron-builder/wiki/Auto-Update#events |
|
// |
|
// The app doesn't need to listen to any events except `update-downloaded` |
|
// |
|
// Uncomment any of the below events to listen for them. Also, |
|
// look in the previous section to see them being used. |
|
//------------------------------------------------------------------- |
|
// autoUpdater.on('checking-for-update', () => { |
|
// }) |
|
// autoUpdater.on('update-available', (ev, info) => { |
|
// }) |
|
// autoUpdater.on('update-not-available', (ev, info) => { |
|
// }) |
|
// autoUpdater.on('error', (ev, err) => { |
|
// }) |
|
// autoUpdater.on('download-progress', (ev, progressObj) => { |
|
// }) |
|
autoUpdater.on('update-downloaded', (ev, info) => { |
|
// Wait 5 seconds, then quit and install |
|
// In your application, you don't need to wait 5 seconds. |
|
// You could call autoUpdater.quitAndInstall(); immediately |
|
setTimeout(function() { |
|
autoUpdater.quitAndInstall(); |
|
}, 5000) |
|
}) |
|
|
|
app.on('ready', function() { |
|
autoUpdater.checkForUpdates(); |
|
}); |
okay, now i understand. earlier i deleted desktop shortcut and after updating versions it was never recreated, i was wondering why is that. so, it's because it remembers that you deleted shortcut and won't recreate it unless you uninstall the app and install it again.
therefore, updater automatically recreates installed .exe shortcut just like as you were manually installing new version. also if you don't use desktop shortcut, you can find installed .exe itself here -
C:\Users\{user}\AppData\Local\Programs\{appName}