diff --git a/src/vs/platform/update/common/update.ts b/src/vs/platform/update/common/update.ts index 0f79e17..97ea778 100644 --- a/src/vs/platform/update/common/update.ts +++ b/src/vs/platform/update/common/update.ts @@ -48,3 +48,4 @@ export const enum UpdateType { Archive, - Snap + Snap, + WindowsInstaller, } diff --git a/src/vs/platform/update/electron-main/updateService.win32.ts b/src/vs/platform/update/electron-main/updateService.win32.ts index 99bf807..27e77f0 100644 --- a/src/vs/platform/update/electron-main/updateService.win32.ts +++ b/src/vs/platform/update/electron-main/updateService.win32.ts @@ -41,5 +41,9 @@ function getUpdateType(): UpdateType { if (typeof _updateType === 'undefined') { - _updateType = fs.existsSync(path.join(path.dirname(process.execPath), 'unins000.exe')) - ? UpdateType.Setup - : UpdateType.Archive; + if (fs.existsSync(path.join(path.dirname(process.execPath), 'unins000.exe'))) { + _updateType = UpdateType.Setup; + } else if (path.basename(path.normalize(path.join(process.execPath, '..', '..'))) === 'Program Files') { + _updateType = UpdateType.WindowsInstaller; + } else { + _updateType = UpdateType.Archive; + } } @@ -103,6 +107,16 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun - if (getUpdateType() === UpdateType.Archive) { - platform += '-archive'; - } else if (this.productService.target === 'user') { - platform += '-user'; + switch (getUpdateType()) { + case UpdateType.Archive: + platform += '-archive'; + break; + case UpdateType.WindowsInstaller: + platform += '-msi'; + break; + default: + if (this.productService.target === 'user') { + platform += '-user'; + } + else { + platform += '-system'; + } } @@ -257,6 +271,14 @@ export class Win32UpdateService extends AbstractUpdateService implements IRelaun } else { - spawn(this.availableUpdate.packagePath, ['/silent', '/log', '/mergetasks=runcode,!desktopicon,!quicklaunchicon'], { - detached: true, - stdio: ['ignore', 'ignore', 'ignore'] - }); + const type = getUpdateType(); + if (type == UpdateType.WindowsInstaller) { + spawn('msiexec.exe', ['/i', this.availableUpdate.packagePath], { + detached: true, + stdio: ['ignore', 'ignore', 'ignore'] + }); + } else { + spawn(this.availableUpdate.packagePath, ['/silent', '/log', '/mergetasks=runcode,!desktopicon,!quicklaunchicon'], { + detached: true, + stdio: ['ignore', 'ignore', 'ignore'] + }); + } }