app-builder-lib 23.0.4 → 23.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,21 +6,28 @@ const builder_util_1 = require("builder-util");
6
6
  const fs_1 = require("builder-util/out/fs");
7
7
  const fs_extra_1 = require("fs-extra");
8
8
  const path = require("path");
9
+ const tar_1 = require("tar");
9
10
  const tools_1 = require("./tools");
10
11
  /** @internal */
11
12
  async function tar(compression, format, outFile, dirToArchive, isMacApp, tempDirManager) {
12
13
  const tarFile = await tempDirManager.getTempFile({ suffix: ".tar" });
13
- const tarArgs = debug7zArgs("a");
14
- tarArgs.push(tarFile);
15
- tarArgs.push(path.basename(dirToArchive));
14
+ const tarArgs = {
15
+ file: tarFile,
16
+ portable: true,
17
+ cwd: dirToArchive,
18
+ prefix: path.basename(outFile, `.${format}`),
19
+ };
20
+ let tarDirectory = ".";
21
+ if (isMacApp) {
22
+ delete tarArgs.prefix;
23
+ tarArgs.cwd = path.dirname(dirToArchive);
24
+ tarDirectory = path.basename(dirToArchive);
25
+ }
16
26
  await Promise.all([
17
- builder_util_1.exec(_7zip_bin_1.path7za, tarArgs, { cwd: path.dirname(dirToArchive) }),
27
+ tar_1.create(tarArgs, [tarDirectory]),
18
28
  // remove file before - 7z doesn't overwrite file, but update
19
29
  fs_1.unlinkIfExists(outFile),
20
30
  ]);
21
- if (!isMacApp) {
22
- await builder_util_1.exec(_7zip_bin_1.path7za, ["rn", tarFile, path.basename(dirToArchive), path.basename(outFile, `.${format}`)]);
23
- }
24
31
  if (format === "tar.lz") {
25
32
  // noinspection SpellCheckingInspection
26
33
  let lzipPath = "lzip";
@@ -1 +1 @@
1
- {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/targets/archive.ts"],"names":[],"mappings":"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","sourcesContent":["import { path7za } from \"7zip-bin\"\nimport { debug7z, exec } from \"builder-util\"\nimport { exists, unlinkIfExists } from \"builder-util/out/fs\"\nimport { move } from \"fs-extra\"\nimport * as path from \"path\"\nimport { TmpDir } from \"temp-file\"\nimport { CompressionLevel } from \"../core\"\nimport { getLinuxToolsPath } from \"./tools\"\n\n/** @internal */\nexport async function tar(\n compression: CompressionLevel | any | any,\n format: string,\n outFile: string,\n dirToArchive: string,\n isMacApp: boolean,\n tempDirManager: TmpDir\n): Promise<void> {\n const tarFile = await tempDirManager.getTempFile({ suffix: \".tar\" })\n const tarArgs = debug7zArgs(\"a\")\n tarArgs.push(tarFile)\n tarArgs.push(path.basename(dirToArchive))\n\n await Promise.all([\n exec(path7za, tarArgs, { cwd: path.dirname(dirToArchive) }),\n // remove file before - 7z doesn't overwrite file, but update\n unlinkIfExists(outFile),\n ])\n\n if (!isMacApp) {\n await exec(path7za, [\"rn\", tarFile, path.basename(dirToArchive), path.basename(outFile, `.${format}`)])\n }\n\n if (format === \"tar.lz\") {\n // noinspection SpellCheckingInspection\n let lzipPath = \"lzip\"\n if (process.platform === \"darwin\") {\n lzipPath = path.join(await getLinuxToolsPath(), \"bin\", lzipPath)\n }\n await exec(lzipPath, [compression === \"store\" ? \"-1\" : \"-9\", \"--keep\" /* keep (don't delete) input files */, tarFile])\n // bloody lzip creates file in the same dir where input file with postfix `.lz`, option --output doesn't work\n await move(`${tarFile}.lz`, outFile)\n return\n }\n\n const args = compute7zCompressArgs(format === \"tar.xz\" ? \"xz\" : format === \"tar.bz2\" ? \"bzip2\" : \"gzip\", {\n isRegularFile: true,\n method: \"DEFAULT\",\n compression,\n })\n args.push(outFile, tarFile)\n await exec(\n path7za,\n args,\n {\n cwd: path.dirname(dirToArchive),\n },\n debug7z.enabled\n )\n}\n\nexport interface ArchiveOptions {\n compression?: CompressionLevel | null\n\n /**\n * @default false\n */\n withoutDir?: boolean\n\n /**\n * @default true\n */\n solid?: boolean\n\n /**\n * @default true\n */\n isArchiveHeaderCompressed?: boolean\n\n dictSize?: number\n excluded?: Array<string> | null\n\n // DEFAULT allows to disable custom logic and do not pass method switch at all\n method?: \"Copy\" | \"LZMA\" | \"Deflate\" | \"DEFAULT\"\n\n isRegularFile?: boolean\n}\n\nexport function compute7zCompressArgs(format: string, options: ArchiveOptions = {}) {\n let storeOnly = options.compression === \"store\"\n const args = debug7zArgs(\"a\")\n\n let isLevelSet = false\n if (process.env.ELECTRON_BUILDER_COMPRESSION_LEVEL != null) {\n storeOnly = false\n args.push(`-mx=${process.env.ELECTRON_BUILDER_COMPRESSION_LEVEL}`)\n isLevelSet = true\n }\n\n const isZip = format === \"zip\"\n if (!storeOnly) {\n if (isZip && options.compression === \"maximum\") {\n // http://superuser.com/a/742034\n args.push(\"-mfb=258\", \"-mpass=15\")\n }\n\n if (!isLevelSet) {\n // https://github.com/electron-userland/electron-builder/pull/3032\n args.push(\"-mx=\" + (!isZip || options.compression === \"maximum\" ? \"9\" : \"7\"))\n }\n }\n\n if (options.dictSize != null) {\n args.push(`-md=${options.dictSize}m`)\n }\n\n // https://sevenzip.osdn.jp/chm/cmdline/switches/method.htm#7Z\n // https://stackoverflow.com/questions/27136783/7zip-produces-different-output-from-identical-input\n // tc and ta are off by default, but to be sure, we explicitly set it to off\n // disable \"Stores NTFS timestamps for files: Modification time, Creation time, Last access time.\" to produce the same archive for the same data\n if (!options.isRegularFile) {\n args.push(\"-mtc=off\")\n }\n\n if (format === \"7z\" || format.endsWith(\".7z\")) {\n if (options.solid === false) {\n args.push(\"-ms=off\")\n }\n\n if (options.isArchiveHeaderCompressed === false) {\n args.push(\"-mhc=off\")\n }\n\n // args valid only for 7z\n // -mtm=off disable \"Stores last Modified timestamps for files.\"\n args.push(\"-mtm=off\", \"-mta=off\")\n }\n\n if (options.method != null) {\n if (options.method !== \"DEFAULT\") {\n args.push(`-mm=${options.method}`)\n }\n } else if (isZip || storeOnly) {\n args.push(`-mm=${storeOnly ? \"Copy\" : \"Deflate\"}`)\n }\n\n if (isZip) {\n // -mcu switch: 7-Zip uses UTF-8, if there are non-ASCII symbols.\n // because default mode: 7-Zip uses UTF-8, if the local code page doesn't contain required symbols.\n // but archive should be the same regardless where produced\n args.push(\"-mcu\")\n }\n return args\n}\n\n// 7z is very fast, so, use ultra compression\n/** @internal */\nexport async function archive(format: string, outFile: string, dirToArchive: string, options: ArchiveOptions = {}): Promise<string> {\n const args = compute7zCompressArgs(format, options)\n // remove file before - 7z doesn't overwrite file, but update\n await unlinkIfExists(outFile)\n\n args.push(outFile, options.withoutDir ? \".\" : path.basename(dirToArchive))\n if (options.excluded != null) {\n for (const mask of options.excluded) {\n args.push(`-xr!${mask}`)\n }\n }\n\n try {\n await exec(\n path7za,\n args,\n {\n cwd: options.withoutDir ? dirToArchive : path.dirname(dirToArchive),\n },\n debug7z.enabled\n )\n } catch (e) {\n if (e.code === \"ENOENT\" && !(await exists(dirToArchive))) {\n throw new Error(`Cannot create archive: \"${dirToArchive}\" doesn't exist`)\n } else {\n throw e\n }\n }\n\n return outFile\n}\n\nfunction debug7zArgs(command: \"a\" | \"x\"): Array<string> {\n const args = [command, \"-bd\"]\n if (debug7z.enabled) {\n args.push(\"-bb\")\n }\n return args\n}\n"]}
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/targets/archive.ts"],"names":[],"mappings":"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","sourcesContent":["import { path7za } from \"7zip-bin\"\nimport { debug7z, exec } from \"builder-util\"\nimport { exists, unlinkIfExists } from \"builder-util/out/fs\"\nimport { move } from \"fs-extra\"\nimport * as path from \"path\"\nimport { create, CreateOptions, FileOptions } from \"tar\"\nimport { TmpDir } from \"temp-file\"\nimport { CompressionLevel } from \"../core\"\nimport { getLinuxToolsPath } from \"./tools\"\n\n/** @internal */\nexport async function tar(\n compression: CompressionLevel | any | any,\n format: string,\n outFile: string,\n dirToArchive: string,\n isMacApp: boolean,\n tempDirManager: TmpDir\n): Promise<void> {\n const tarFile = await tempDirManager.getTempFile({ suffix: \".tar\" })\n const tarArgs: CreateOptions & FileOptions = {\n file: tarFile,\n portable: true,\n cwd: dirToArchive,\n prefix: path.basename(outFile, `.${format}`),\n }\n let tarDirectory = \".\"\n if (isMacApp) {\n delete tarArgs.prefix\n tarArgs.cwd = path.dirname(dirToArchive)\n tarDirectory = path.basename(dirToArchive)\n }\n\n await Promise.all([\n create(tarArgs, [tarDirectory]),\n // remove file before - 7z doesn't overwrite file, but update\n unlinkIfExists(outFile),\n ])\n\n if (format === \"tar.lz\") {\n // noinspection SpellCheckingInspection\n let lzipPath = \"lzip\"\n if (process.platform === \"darwin\") {\n lzipPath = path.join(await getLinuxToolsPath(), \"bin\", lzipPath)\n }\n await exec(lzipPath, [compression === \"store\" ? \"-1\" : \"-9\", \"--keep\" /* keep (don't delete) input files */, tarFile])\n // bloody lzip creates file in the same dir where input file with postfix `.lz`, option --output doesn't work\n await move(`${tarFile}.lz`, outFile)\n return\n }\n\n const args = compute7zCompressArgs(format === \"tar.xz\" ? \"xz\" : format === \"tar.bz2\" ? \"bzip2\" : \"gzip\", {\n isRegularFile: true,\n method: \"DEFAULT\",\n compression,\n })\n args.push(outFile, tarFile)\n await exec(\n path7za,\n args,\n {\n cwd: path.dirname(dirToArchive),\n },\n debug7z.enabled\n )\n}\n\nexport interface ArchiveOptions {\n compression?: CompressionLevel | null\n\n /**\n * @default false\n */\n withoutDir?: boolean\n\n /**\n * @default true\n */\n solid?: boolean\n\n /**\n * @default true\n */\n isArchiveHeaderCompressed?: boolean\n\n dictSize?: number\n excluded?: Array<string> | null\n\n // DEFAULT allows to disable custom logic and do not pass method switch at all\n method?: \"Copy\" | \"LZMA\" | \"Deflate\" | \"DEFAULT\"\n\n isRegularFile?: boolean\n}\n\nexport function compute7zCompressArgs(format: string, options: ArchiveOptions = {}) {\n let storeOnly = options.compression === \"store\"\n const args = debug7zArgs(\"a\")\n\n let isLevelSet = false\n if (process.env.ELECTRON_BUILDER_COMPRESSION_LEVEL != null) {\n storeOnly = false\n args.push(`-mx=${process.env.ELECTRON_BUILDER_COMPRESSION_LEVEL}`)\n isLevelSet = true\n }\n\n const isZip = format === \"zip\"\n if (!storeOnly) {\n if (isZip && options.compression === \"maximum\") {\n // http://superuser.com/a/742034\n args.push(\"-mfb=258\", \"-mpass=15\")\n }\n\n if (!isLevelSet) {\n // https://github.com/electron-userland/electron-builder/pull/3032\n args.push(\"-mx=\" + (!isZip || options.compression === \"maximum\" ? \"9\" : \"7\"))\n }\n }\n\n if (options.dictSize != null) {\n args.push(`-md=${options.dictSize}m`)\n }\n\n // https://sevenzip.osdn.jp/chm/cmdline/switches/method.htm#7Z\n // https://stackoverflow.com/questions/27136783/7zip-produces-different-output-from-identical-input\n // tc and ta are off by default, but to be sure, we explicitly set it to off\n // disable \"Stores NTFS timestamps for files: Modification time, Creation time, Last access time.\" to produce the same archive for the same data\n if (!options.isRegularFile) {\n args.push(\"-mtc=off\")\n }\n\n if (format === \"7z\" || format.endsWith(\".7z\")) {\n if (options.solid === false) {\n args.push(\"-ms=off\")\n }\n\n if (options.isArchiveHeaderCompressed === false) {\n args.push(\"-mhc=off\")\n }\n\n // args valid only for 7z\n // -mtm=off disable \"Stores last Modified timestamps for files.\"\n args.push(\"-mtm=off\", \"-mta=off\")\n }\n\n if (options.method != null) {\n if (options.method !== \"DEFAULT\") {\n args.push(`-mm=${options.method}`)\n }\n } else if (isZip || storeOnly) {\n args.push(`-mm=${storeOnly ? \"Copy\" : \"Deflate\"}`)\n }\n\n if (isZip) {\n // -mcu switch: 7-Zip uses UTF-8, if there are non-ASCII symbols.\n // because default mode: 7-Zip uses UTF-8, if the local code page doesn't contain required symbols.\n // but archive should be the same regardless where produced\n args.push(\"-mcu\")\n }\n return args\n}\n\n// 7z is very fast, so, use ultra compression\n/** @internal */\nexport async function archive(format: string, outFile: string, dirToArchive: string, options: ArchiveOptions = {}): Promise<string> {\n const args = compute7zCompressArgs(format, options)\n // remove file before - 7z doesn't overwrite file, but update\n await unlinkIfExists(outFile)\n\n args.push(outFile, options.withoutDir ? \".\" : path.basename(dirToArchive))\n if (options.excluded != null) {\n for (const mask of options.excluded) {\n args.push(`-xr!${mask}`)\n }\n }\n\n try {\n await exec(\n path7za,\n args,\n {\n cwd: options.withoutDir ? dirToArchive : path.dirname(dirToArchive),\n },\n debug7z.enabled\n )\n } catch (e) {\n if (e.code === \"ENOENT\" && !(await exists(dirToArchive))) {\n throw new Error(`Cannot create archive: \"${dirToArchive}\" doesn't exist`)\n } else {\n throw e\n }\n }\n\n return outFile\n}\n\nfunction debug7zArgs(command: \"a\" | \"x\"): Array<string> {\n const args = [command, \"-bd\"]\n if (debug7z.enabled) {\n args.push(\"-bb\")\n }\n return args\n}\n"]}
@@ -277,7 +277,7 @@ class NsisTarget extends core_1.Target {
277
277
  else if (this.isBuildDifferentialAware) {
278
278
  updateInfo = await differentialUpdateInfoBuilder_1.createBlockmap(installerPath, this, packager, safeArtifactName);
279
279
  }
280
- if (updateInfo != null && isPerMachine && oneClick) {
280
+ if (updateInfo != null && isPerMachine && (oneClick || options.packElevateHelper)) {
281
281
  updateInfo.isAdminRightsRequired = true;
282
282
  }
283
283
  await packager.info.callArtifactBuildCompleted({
@@ -1 +1 @@
1
- {"version":3,"file":"NsisTarget.js","sourceRoot":"","sources":["../../../src/targets/nsis/NsisTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import { path7za } from \"7zip-bin\"\nimport BluebirdPromise from \"bluebird-lst\"\nimport { Arch, asArray, AsyncTaskManager, exec, executeAppBuilder, getPlatformIconFileName, InvalidConfigurationError, log, spawnAndWrite, use } from \"builder-util\"\nimport { CURRENT_APP_INSTALLER_FILE_NAME, CURRENT_APP_PACKAGE_FILE_NAME, PackageFileInfo, UUID } from \"builder-util-runtime\"\nimport { exists, statOrNull, walk } from \"builder-util/out/fs\"\nimport _debug from \"debug\"\nimport * as fs from \"fs\"\nimport { readFile, stat, unlink } from \"fs-extra\"\nimport * as path from \"path\"\nimport { getBinFromUrl } from \"../../binDownload\"\nimport { Target } from \"../../core\"\nimport { DesktopShortcutCreationPolicy, getEffectiveOptions } from \"../../options/CommonWindowsInstallerConfiguration\"\nimport { computeSafeArtifactNameIfNeeded, normalizeExt } from \"../../platformPackager\"\nimport { hashFile } from \"../../util/hash\"\nimport { isMacOsCatalina } from \"../../util/macosVersion\"\nimport { time } from \"../../util/timer\"\nimport { execWine } from \"../../wine\"\nimport { WinPackager } from \"../../winPackager\"\nimport { archive, ArchiveOptions } from \"../archive\"\nimport { appendBlockmap, configureDifferentialAwareArchiveOptions, createBlockmap, createNsisWebDifferentialUpdateInfo } from \"../differentialUpdateInfoBuilder\"\nimport { getWindowsInstallationAppPackageName, getWindowsInstallationDirName } from \"../targetUtil\"\nimport { addCustomMessageFileInclude, createAddLangsMacro, LangConfigurator } from \"./nsisLang\"\nimport { computeLicensePage } from \"./nsisLicense\"\nimport { NsisOptions, PortableOptions } from \"./nsisOptions\"\nimport { NsisScriptGenerator } from \"./nsisScriptGenerator\"\nimport { AppPackageHelper, nsisTemplatesDir, NSIS_PATH, UninstallerReader, NsisTargetOptions } from \"./nsisUtil\"\n\nconst debug = _debug(\"electron-builder:nsis\")\n\n// noinspection SpellCheckingInspection\nconst ELECTRON_BUILDER_NS_UUID = UUID.parse(\"50e065bc-3134-11e6-9bab-38c9862bdaf3\")\n\n// noinspection SpellCheckingInspection\nconst nsisResourcePathPromise = () => getBinFromUrl(\"nsis-resources\", \"3.4.1\", \"Dqd6g+2buwwvoG1Vyf6BHR1b+25QMmPcwZx40atOT57gH27rkjOei1L0JTldxZu4NFoEmW4kJgZ3DlSWVON3+Q==\")\n\nconst USE_NSIS_BUILT_IN_COMPRESSOR = false\n\nexport class NsisTarget extends Target {\n readonly options: NsisOptions\n\n /** @private */\n readonly archs: Map<Arch, string> = new Map()\n\n constructor(readonly packager: WinPackager, readonly outDir: string, targetName: string, protected readonly packageHelper: AppPackageHelper) {\n super(targetName)\n\n this.packageHelper.refCount++\n\n this.options =\n targetName === \"portable\"\n ? Object.create(null)\n : {\n preCompressedFileExtensions: [\".avi\", \".mov\", \".m4v\", \".mp4\", \".m4p\", \".qt\", \".mkv\", \".webm\", \".vmdk\"],\n ...this.packager.config.nsis,\n }\n\n if (targetName !== \"nsis\") {\n Object.assign(this.options, (this.packager.config as any)[targetName === \"nsis-web\" ? \"nsisWeb\" : targetName])\n }\n\n const deps = packager.info.metadata.dependencies\n if (deps != null && deps[\"electron-squirrel-startup\"] != null) {\n log.warn('\"electron-squirrel-startup\" dependency is not required for NSIS')\n }\n\n NsisTargetOptions.resolve(this.options)\n }\n\n build(appOutDir: string, arch: Arch) {\n this.archs.set(arch, appOutDir)\n return Promise.resolve()\n }\n\n get isBuildDifferentialAware() {\n return !this.isPortable && this.options.differentialPackage !== false\n }\n\n private getPreCompressedFileExtensions(): Array<string> | null {\n const result = this.isWebInstaller ? null : this.options.preCompressedFileExtensions\n return result == null ? null : asArray(result).map(it => (it.startsWith(\".\") ? it : `.${it}`))\n }\n\n /** @private */\n async buildAppPackage(appOutDir: string, arch: Arch): Promise<PackageFileInfo> {\n const options = this.options\n const packager = this.packager\n\n const isBuildDifferentialAware = this.isBuildDifferentialAware\n const format = !isBuildDifferentialAware && options.useZip ? \"zip\" : \"7z\"\n const archiveFile = path.join(this.outDir, `${packager.appInfo.sanitizedName}-${packager.appInfo.version}-${Arch[arch]}.nsis.${format}`)\n const preCompressedFileExtensions = this.getPreCompressedFileExtensions()\n const archiveOptions: ArchiveOptions = {\n withoutDir: true,\n compression: packager.compression,\n excluded: preCompressedFileExtensions == null ? null : preCompressedFileExtensions.map(it => `*${it}`),\n }\n\n const timer = time(`nsis package, ${Arch[arch]}`)\n await archive(format, archiveFile, appOutDir, isBuildDifferentialAware ? configureDifferentialAwareArchiveOptions(archiveOptions) : archiveOptions)\n timer.end()\n\n if (isBuildDifferentialAware && this.isWebInstaller) {\n const data = await appendBlockmap(archiveFile)\n return {\n ...data,\n path: archiveFile,\n }\n } else {\n return await createPackageFileInfo(archiveFile)\n }\n }\n\n protected get installerFilenamePattern(): string {\n // tslint:disable:no-invalid-template-strings\n return \"${productName} \" + (this.isPortable ? \"\" : \"Setup \") + \"${version}.${ext}\"\n }\n\n private get isPortable() {\n return this.name === \"portable\"\n }\n\n async finishBuild(): Promise<any> {\n try {\n const { pattern } = this.packager.artifactPatternConfig(this.options, this.installerFilenamePattern)\n const builds = new Set([this.archs])\n if (pattern.includes(\"${arch}\") && this.archs.size > 1) {\n ;[...this.archs].forEach(([arch, appOutDir]) => builds.add(new Map().set(arch, appOutDir)))\n }\n const doBuildArchs = builds.values()\n for (const archs of doBuildArchs) {\n await this.buildInstaller(archs)\n }\n } finally {\n await this.packageHelper.finishBuild()\n }\n }\n\n private async buildInstaller(archs: Map<Arch, string>): Promise<any> {\n const primaryArch = archs.size === 1 ? archs.keys().next().value : null\n const packager = this.packager\n const appInfo = packager.appInfo\n const options = this.options\n const installerFilename = packager.expandArtifactNamePattern(\n options,\n \"exe\",\n primaryArch,\n this.installerFilenamePattern,\n false,\n this.packager.platformSpecificBuildOptions.defaultArch\n )\n const oneClick = options.oneClick !== false\n const installerPath = path.join(this.outDir, installerFilename)\n\n const logFields: any = {\n target: this.name,\n file: log.filePath(installerPath),\n archs: Array.from(archs.keys())\n .map(it => Arch[it])\n .join(\", \"),\n }\n const isPerMachine = options.perMachine === true\n if (!this.isPortable) {\n logFields.oneClick = oneClick\n logFields.perMachine = isPerMachine\n }\n\n await packager.info.callArtifactBuildStarted(\n {\n targetPresentableName: this.name,\n file: installerPath,\n arch: primaryArch,\n },\n logFields\n )\n\n const guid = options.guid || UUID.v5(appInfo.id, ELECTRON_BUILDER_NS_UUID)\n const uninstallAppKey = guid.replace(/\\\\/g, \" - \")\n const defines: any = {\n APP_ID: appInfo.id,\n APP_GUID: guid,\n // Windows bug - entry in Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall cannot have \\ symbols (dir)\n UNINSTALL_APP_KEY: uninstallAppKey,\n PRODUCT_NAME: appInfo.productName,\n PRODUCT_FILENAME: appInfo.productFilename,\n APP_FILENAME: getWindowsInstallationDirName(appInfo, !oneClick || isPerMachine),\n APP_DESCRIPTION: appInfo.description,\n VERSION: appInfo.version,\n\n PROJECT_DIR: packager.projectDir,\n BUILD_RESOURCES_DIR: packager.info.buildResourcesDir,\n\n APP_PACKAGE_NAME: getWindowsInstallationAppPackageName(appInfo.name),\n }\n if (options.customNsisBinary?.debugLogging) {\n defines.ENABLE_LOGGING_ELECTRON_BUILDER = null\n }\n if (uninstallAppKey !== guid) {\n defines.UNINSTALL_REGISTRY_KEY_2 = `Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\\\\${guid}`\n }\n\n const commands: any = {\n OutFile: `\"${installerPath}\"`,\n VIProductVersion: appInfo.getVersionInWeirdWindowsForm(),\n VIAddVersionKey: this.computeVersionKey(),\n Unicode: this.isUnicodeEnabled,\n }\n\n const isPortable = this.isPortable\n const iconPath = (isPortable ? null : await packager.getResource(options.installerIcon, \"installerIcon.ico\")) || (await packager.getIconPath())\n if (iconPath != null) {\n if (isPortable) {\n commands.Icon = `\"${iconPath}\"`\n } else {\n defines.MUI_ICON = iconPath\n defines.MUI_UNICON = iconPath\n }\n }\n\n const packageFiles: { [arch: string]: PackageFileInfo } = {}\n let estimatedSize = 0\n if (this.isPortable && options.useZip) {\n for (const [arch, dir] of archs.entries()) {\n defines[arch === Arch.x64 ? \"APP_DIR_64\" : arch === Arch.arm64 ? \"APP_DIR_ARM64\" : \"APP_DIR_32\"] = dir\n }\n } else if (USE_NSIS_BUILT_IN_COMPRESSOR && archs.size === 1) {\n defines.APP_BUILD_DIR = archs.get(archs.keys().next().value)\n } else {\n await BluebirdPromise.map(archs.keys(), async arch => {\n const fileInfo = await this.packageHelper.packArch(arch, this)\n const file = fileInfo.path\n const defineKey = arch === Arch.x64 ? \"APP_64\" : arch === Arch.arm64 ? \"APP_ARM64\" : \"APP_32\"\n defines[defineKey] = file\n defines[`${defineKey}_NAME`] = path.basename(file)\n // nsis expect a hexadecimal string\n defines[`${defineKey}_HASH`] = Buffer.from(fileInfo.sha512, \"base64\").toString(\"hex\").toUpperCase()\n\n if (this.isWebInstaller) {\n await packager.dispatchArtifactCreated(file, this, arch)\n packageFiles[Arch[arch]] = fileInfo\n }\n\n const archiveInfo = (await exec(path7za, [\"l\", file])).trim()\n // after adding blockmap data will be \"Warnings: 1\" in the end of output\n const match = /(\\d+)\\s+\\d+\\s+\\d+\\s+files/.exec(archiveInfo)\n if (match == null) {\n log.warn({ output: archiveInfo }, \"cannot compute size of app package\")\n } else {\n estimatedSize += parseInt(match[1], 10)\n }\n })\n }\n\n this.configureDefinesForAllTypeOfInstaller(defines)\n if (isPortable) {\n const { unpackDirName, requestExecutionLevel, splashImage } = options as PortableOptions\n defines.REQUEST_EXECUTION_LEVEL = requestExecutionLevel || \"user\"\n\n // https://github.com/electron-userland/electron-builder/issues/5764\n if (typeof unpackDirName === \"string\" || !unpackDirName) {\n defines.UNPACK_DIR_NAME = unpackDirName || (await executeAppBuilder([\"ksuid\"]))\n }\n\n if (splashImage != null) {\n defines.SPLASH_IMAGE = path.resolve(packager.projectDir, splashImage)\n }\n } else {\n await this.configureDefines(oneClick, defines)\n }\n\n if (estimatedSize !== 0) {\n // in kb\n defines.ESTIMATED_SIZE = Math.round(estimatedSize / 1024)\n }\n\n if (packager.compression === \"store\") {\n commands.SetCompress = \"off\"\n } else {\n // difference - 33.540 vs 33.601, only 61 KB (but zip is faster to decompress)\n // do not use /SOLID - \"With solid compression, files are uncompressed to temporary file before they are copied to their final destination\",\n // it is not good for portable installer (where built-in NSIS compression is used). http://forums.winamp.com/showpost.php?p=2982902&postcount=6\n commands.SetCompressor = \"zlib\"\n if (!this.isWebInstaller) {\n defines.COMPRESS = \"auto\"\n }\n }\n\n debug(defines)\n debug(commands)\n\n if (packager.packagerOptions.effectiveOptionComputed != null && (await packager.packagerOptions.effectiveOptionComputed([defines, commands]))) {\n return\n }\n\n // prepare short-version variants of defines and commands, to make an uninstaller that doesn't differ much from the previous one\n const definesUninstaller: any = { ...defines }\n const commandsUninstaller: any = { ...commands }\n if (appInfo.shortVersion != null) {\n definesUninstaller.VERSION = appInfo.shortVersion\n commandsUninstaller.VIProductVersion = appInfo.shortVersionWindows\n commandsUninstaller.VIAddVersionKey = this.computeVersionKey(true)\n }\n\n const sharedHeader = await this.computeCommonInstallerScriptHeader()\n const script = isPortable\n ? await readFile(path.join(nsisTemplatesDir, \"portable.nsi\"), \"utf8\")\n : await this.computeScriptAndSignUninstaller(definesUninstaller, commandsUninstaller, installerPath, sharedHeader, archs)\n\n // copy outfile name into main options, as the computeScriptAndSignUninstaller function was kind enough to add important data to temporary defines.\n defines.UNINSTALLER_OUT_FILE = definesUninstaller.UNINSTALLER_OUT_FILE\n\n await this.executeMakensis(defines, commands, sharedHeader + (await this.computeFinalScript(script, true, archs)))\n await Promise.all<any>([packager.sign(installerPath), defines.UNINSTALLER_OUT_FILE == null ? Promise.resolve() : unlink(defines.UNINSTALLER_OUT_FILE)])\n\n const safeArtifactName = computeSafeArtifactNameIfNeeded(installerFilename, () => this.generateGitHubInstallerName())\n let updateInfo: any\n if (this.isWebInstaller) {\n updateInfo = createNsisWebDifferentialUpdateInfo(installerPath, packageFiles)\n } else if (this.isBuildDifferentialAware) {\n updateInfo = await createBlockmap(installerPath, this, packager, safeArtifactName)\n }\n\n if (updateInfo != null && isPerMachine && oneClick) {\n updateInfo.isAdminRightsRequired = true\n }\n\n await packager.info.callArtifactBuildCompleted({\n file: installerPath,\n updateInfo,\n target: this,\n packager,\n arch: primaryArch,\n safeArtifactName,\n isWriteUpdateInfo: !this.isPortable,\n })\n }\n\n protected generateGitHubInstallerName() {\n const appInfo = this.packager.appInfo\n const classifier = appInfo.name.toLowerCase() === appInfo.name ? \"setup-\" : \"Setup-\"\n return `${appInfo.name}-${this.isPortable ? \"\" : classifier}${appInfo.version}.exe`\n }\n\n private get isUnicodeEnabled() {\n return this.options.unicode !== false\n }\n\n get isWebInstaller(): boolean {\n return false\n }\n\n private async computeScriptAndSignUninstaller(defines: any, commands: any, installerPath: string, sharedHeader: string, archs: Map<Arch, string>) {\n const packager = this.packager\n const customScriptPath = await packager.getResource(this.options.script, \"installer.nsi\")\n const script = await readFile(customScriptPath || path.join(nsisTemplatesDir, \"installer.nsi\"), \"utf8\")\n\n if (customScriptPath != null) {\n log.info({ reason: \"custom NSIS script is used\" }, \"uninstaller is not signed by electron-builder\")\n return script\n }\n\n // https://github.com/electron-userland/electron-builder/issues/2103\n // it is more safe and reliable to write uninstaller to our out dir\n const uninstallerPath = path.join(this.outDir, `__uninstaller-${this.name}-${this.packager.appInfo.sanitizedName}.exe`)\n const isWin = process.platform === \"win32\"\n defines.BUILD_UNINSTALLER = null\n defines.UNINSTALLER_OUT_FILE = isWin ? uninstallerPath : path.win32.join(\"Z:\", uninstallerPath)\n await this.executeMakensis(defines, commands, sharedHeader + (await this.computeFinalScript(script, false, archs)))\n\n // http://forums.winamp.com/showthread.php?p=3078545\n if (isMacOsCatalina()) {\n try {\n await UninstallerReader.exec(installerPath, uninstallerPath)\n } catch (error: any) {\n log.warn(`packager.vm is used: ${error.message}`)\n\n const vm = await packager.vm.value\n await vm.exec(installerPath, [])\n // Parallels VM can exit after command execution, but NSIS continue to be running\n let i = 0\n while (!(await exists(uninstallerPath)) && i++ < 100) {\n // noinspection JSUnusedLocalSymbols\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n await new Promise((resolve, _reject) => setTimeout(resolve, 300))\n }\n }\n } else {\n await execWine(installerPath, null, [], { env: { __COMPAT_LAYER: \"RunAsInvoker\" } })\n }\n await packager.sign(uninstallerPath, \" Signing NSIS uninstaller\")\n\n delete defines.BUILD_UNINSTALLER\n // platform-specific path, not wine\n defines.UNINSTALLER_OUT_FILE = uninstallerPath\n return script\n }\n\n private computeVersionKey(short = false) {\n // Error: invalid VIProductVersion format, should be X.X.X.X\n // so, we must strip beta\n const localeId = this.options.language || \"1033\"\n const appInfo = this.packager.appInfo\n const versionKey = [\n `/LANG=${localeId} ProductName \"${appInfo.productName}\"`,\n `/LANG=${localeId} ProductVersion \"${appInfo.version}\"`,\n `/LANG=${localeId} LegalCopyright \"${appInfo.copyright}\"`,\n `/LANG=${localeId} FileDescription \"${appInfo.description}\"`,\n `/LANG=${localeId} FileVersion \"${appInfo.buildVersion}\"`,\n ]\n if (short) {\n versionKey[1] = `/LANG=${localeId} ProductVersion \"${appInfo.shortVersion}\"`\n versionKey[4] = `/LANG=${localeId} FileVersion \"${appInfo.shortVersion}\"`\n }\n use(this.packager.platformSpecificBuildOptions.legalTrademarks, it => versionKey.push(`/LANG=${localeId} LegalTrademarks \"${it}\"`))\n use(appInfo.companyName, it => versionKey.push(`/LANG=${localeId} CompanyName \"${it}\"`))\n return versionKey\n }\n\n protected configureDefines(oneClick: boolean, defines: any): Promise<any> {\n const packager = this.packager\n const options = this.options\n\n const asyncTaskManager = new AsyncTaskManager(packager.info.cancellationToken)\n\n if (oneClick) {\n defines.ONE_CLICK = null\n\n if (options.runAfterFinish !== false) {\n defines.RUN_AFTER_FINISH = null\n }\n\n asyncTaskManager.add(async () => {\n const installerHeaderIcon = await packager.getResource(options.installerHeaderIcon, \"installerHeaderIcon.ico\")\n if (installerHeaderIcon != null) {\n defines.HEADER_ICO = installerHeaderIcon\n }\n })\n } else {\n if (options.runAfterFinish === false) {\n defines.HIDE_RUN_AFTER_FINISH = null\n }\n\n asyncTaskManager.add(async () => {\n const installerHeader = await packager.getResource(options.installerHeader, \"installerHeader.bmp\")\n if (installerHeader != null) {\n defines.MUI_HEADERIMAGE = null\n defines.MUI_HEADERIMAGE_RIGHT = null\n defines.MUI_HEADERIMAGE_BITMAP = installerHeader\n }\n })\n\n asyncTaskManager.add(async () => {\n const bitmap = (await packager.getResource(options.installerSidebar, \"installerSidebar.bmp\")) || \"${NSISDIR}\\\\Contrib\\\\Graphics\\\\Wizard\\\\nsis3-metro.bmp\"\n defines.MUI_WELCOMEFINISHPAGE_BITMAP = bitmap\n defines.MUI_UNWELCOMEFINISHPAGE_BITMAP = (await packager.getResource(options.uninstallerSidebar, \"uninstallerSidebar.bmp\")) || bitmap\n })\n\n if (options.allowElevation !== false) {\n defines.MULTIUSER_INSTALLMODE_ALLOW_ELEVATION = null\n }\n }\n\n if (options.perMachine === true) {\n defines.INSTALL_MODE_PER_ALL_USERS = null\n }\n\n if (!oneClick || options.perMachine === true) {\n defines.INSTALL_MODE_PER_ALL_USERS_REQUIRED = null\n }\n\n if (options.allowToChangeInstallationDirectory) {\n if (oneClick) {\n throw new InvalidConfigurationError(\"allowToChangeInstallationDirectory makes sense only for assisted installer (please set oneClick to false)\")\n }\n defines.allowToChangeInstallationDirectory = null\n }\n\n const commonOptions = getEffectiveOptions(options, packager)\n\n if (commonOptions.menuCategory != null) {\n defines.MENU_FILENAME = commonOptions.menuCategory\n }\n\n defines.SHORTCUT_NAME = commonOptions.shortcutName\n\n if (options.deleteAppDataOnUninstall) {\n defines.DELETE_APP_DATA_ON_UNINSTALL = null\n }\n\n asyncTaskManager.add(async () => {\n const uninstallerIcon = await packager.getResource(options.uninstallerIcon, \"uninstallerIcon.ico\")\n if (uninstallerIcon != null) {\n // we don't need to copy MUI_UNICON (defaults to app icon), so, we have 2 defines\n defines.UNINSTALLER_ICON = uninstallerIcon\n defines.MUI_UNICON = uninstallerIcon\n }\n })\n\n defines.UNINSTALL_DISPLAY_NAME = packager.expandMacro(options.uninstallDisplayName || \"${productName} ${version}\", null, {}, false)\n if (commonOptions.isCreateDesktopShortcut === DesktopShortcutCreationPolicy.NEVER) {\n defines.DO_NOT_CREATE_DESKTOP_SHORTCUT = null\n }\n if (commonOptions.isCreateDesktopShortcut === DesktopShortcutCreationPolicy.ALWAYS) {\n defines.RECREATE_DESKTOP_SHORTCUT = null\n }\n if (!commonOptions.isCreateStartMenuShortcut) {\n defines.DO_NOT_CREATE_START_MENU_SHORTCUT = null\n }\n\n if (options.displayLanguageSelector === true) {\n defines.DISPLAY_LANG_SELECTOR = null\n }\n\n return asyncTaskManager.awaitTasks()\n }\n\n private configureDefinesForAllTypeOfInstaller(defines: any) {\n const appInfo = this.packager.appInfo\n const companyName = appInfo.companyName\n if (companyName != null) {\n defines.COMPANY_NAME = companyName\n }\n\n // electron uses product file name as app data, define it as well to remove on uninstall\n if (defines.APP_FILENAME !== appInfo.productFilename) {\n defines.APP_PRODUCT_FILENAME = appInfo.productFilename\n }\n\n if (this.isWebInstaller) {\n defines.APP_PACKAGE_STORE_FILE = `${appInfo.updaterCacheDirName}\\\\${CURRENT_APP_PACKAGE_FILE_NAME}`\n } else {\n defines.APP_INSTALLER_STORE_FILE = `${appInfo.updaterCacheDirName}\\\\${CURRENT_APP_INSTALLER_FILE_NAME}`\n }\n\n if (!this.isWebInstaller && defines.APP_BUILD_DIR == null) {\n const options = this.options\n if (options.useZip) {\n defines.ZIP_COMPRESSION = null\n }\n\n defines.COMPRESSION_METHOD = options.useZip ? \"zip\" : \"7z\"\n }\n }\n\n private async executeMakensis(defines: any, commands: any, script: string) {\n const args: Array<string> = this.options.warningsAsErrors === false ? [] : [\"-WX\"]\n args.push(\"-INPUTCHARSET\", \"UTF8\")\n for (const name of Object.keys(defines)) {\n const value = defines[name]\n if (value == null) {\n args.push(`-D${name}`)\n } else {\n args.push(`-D${name}=${value}`)\n }\n }\n\n for (const name of Object.keys(commands)) {\n const value = commands[name]\n if (Array.isArray(value)) {\n for (const c of value) {\n args.push(`-X${name} ${c}`)\n }\n } else {\n args.push(`-X${name} ${value}`)\n }\n }\n\n args.push(\"-\")\n\n if (this.packager.debugLogger.isEnabled) {\n this.packager.debugLogger.add(\"nsis.script\", script)\n }\n\n const nsisPath = await NSIS_PATH()\n const command = path.join(\n nsisPath,\n process.platform === \"darwin\" ? \"mac\" : process.platform === \"win32\" ? \"Bin\" : \"linux\",\n process.platform === \"win32\" ? \"makensis.exe\" : \"makensis\"\n )\n\n // if (process.platform === \"win32\") {\n // fix for an issue caused by virus scanners, locking the file during write\n // https://github.com/electron-userland/electron-builder/issues/5005\n await ensureNotBusy(commands[\"OutFile\"].replace(/\"/g, \"\"))\n // }\n\n await spawnAndWrite(command, args, script, {\n // we use NSIS_CONFIG_CONST_DATA_PATH=no to build makensis on Linux, but in any case it doesn't use stubs as MacOS/Windows version, so, we explicitly set NSISDIR\n env: { ...process.env, NSISDIR: nsisPath },\n cwd: nsisTemplatesDir,\n })\n }\n\n private async computeCommonInstallerScriptHeader() {\n const packager = this.packager\n const options = this.options\n const scriptGenerator = new NsisScriptGenerator()\n const langConfigurator = new LangConfigurator(options)\n\n scriptGenerator.include(path.join(nsisTemplatesDir, \"include\", \"StdUtils.nsh\"))\n\n const includeDir = path.join(nsisTemplatesDir, \"include\")\n scriptGenerator.addIncludeDir(includeDir)\n scriptGenerator.flags([\"updated\", \"force-run\", \"keep-shortcuts\", \"no-desktop-shortcut\", \"delete-app-data\", \"allusers\", \"currentuser\"])\n\n createAddLangsMacro(scriptGenerator, langConfigurator)\n\n const taskManager = new AsyncTaskManager(packager.info.cancellationToken)\n\n const pluginArch = this.isUnicodeEnabled ? \"x86-unicode\" : \"x86-ansi\"\n taskManager.add(async () => {\n scriptGenerator.addPluginDir(pluginArch, path.join(await nsisResourcePathPromise(), \"plugins\", pluginArch))\n })\n\n taskManager.add(async () => {\n const userPluginDir = path.join(packager.info.buildResourcesDir, pluginArch)\n const stat = await statOrNull(userPluginDir)\n if (stat != null && stat.isDirectory()) {\n scriptGenerator.addPluginDir(pluginArch, userPluginDir)\n }\n })\n\n taskManager.addTask(addCustomMessageFileInclude(\"messages.yml\", packager, scriptGenerator, langConfigurator))\n\n if (!this.isPortable) {\n if (options.oneClick === false) {\n taskManager.addTask(addCustomMessageFileInclude(\"assistedMessages.yml\", packager, scriptGenerator, langConfigurator))\n }\n\n taskManager.add(async () => {\n const customInclude = await packager.getResource(this.options.include, \"installer.nsh\")\n if (customInclude != null) {\n scriptGenerator.addIncludeDir(packager.info.buildResourcesDir)\n scriptGenerator.include(customInclude)\n }\n })\n }\n\n await taskManager.awaitTasks()\n return scriptGenerator.build()\n }\n\n private async computeFinalScript(originalScript: string, isInstaller: boolean, archs: Map<Arch, string>) {\n const packager = this.packager\n const options = this.options\n const langConfigurator = new LangConfigurator(options)\n\n const scriptGenerator = new NsisScriptGenerator()\n const taskManager = new AsyncTaskManager(packager.info.cancellationToken)\n\n if (isInstaller) {\n // http://stackoverflow.com/questions/997456/nsis-license-file-based-on-language-selection\n taskManager.add(() => computeLicensePage(packager, options, scriptGenerator, langConfigurator.langs))\n }\n\n await taskManager.awaitTasks()\n\n if (this.isPortable) {\n return scriptGenerator.build() + originalScript\n }\n\n const preCompressedFileExtensions = this.getPreCompressedFileExtensions()\n if (preCompressedFileExtensions != null && preCompressedFileExtensions.length !== 0) {\n for (const [arch, dir] of archs.entries()) {\n await generateForPreCompressed(preCompressedFileExtensions, dir, arch, scriptGenerator)\n }\n }\n\n const fileAssociations = packager.fileAssociations\n if (fileAssociations.length !== 0) {\n scriptGenerator.include(path.join(path.join(nsisTemplatesDir, \"include\"), \"FileAssociation.nsh\"))\n if (isInstaller) {\n const registerFileAssociationsScript = new NsisScriptGenerator()\n for (const item of fileAssociations) {\n const extensions = asArray(item.ext).map(normalizeExt)\n for (const ext of extensions) {\n const customIcon = await packager.getResource(getPlatformIconFileName(item.icon, false), `${extensions[0]}.ico`)\n let installedIconPath = \"$appExe,0\"\n if (customIcon != null) {\n installedIconPath = `$INSTDIR\\\\resources\\\\${path.basename(customIcon)}`\n registerFileAssociationsScript.file(installedIconPath, customIcon)\n }\n\n const icon = `\"${installedIconPath}\"`\n const commandText = `\"Open with ${packager.appInfo.productName}\"`\n const command = '\"$appExe $\\\\\"%1$\\\\\"\"'\n registerFileAssociationsScript.insertMacro(\"APP_ASSOCIATE\", `\"${ext}\" \"${item.name || ext}\" \"${item.description || \"\"}\" ${icon} ${commandText} ${command}`)\n }\n }\n scriptGenerator.macro(\"registerFileAssociations\", registerFileAssociationsScript)\n } else {\n const unregisterFileAssociationsScript = new NsisScriptGenerator()\n for (const item of fileAssociations) {\n for (const ext of asArray(item.ext)) {\n unregisterFileAssociationsScript.insertMacro(\"APP_UNASSOCIATE\", `\"${normalizeExt(ext)}\" \"${item.name || ext}\"`)\n }\n }\n scriptGenerator.macro(\"unregisterFileAssociations\", unregisterFileAssociationsScript)\n }\n }\n\n return scriptGenerator.build() + originalScript\n }\n}\n\nasync function generateForPreCompressed(preCompressedFileExtensions: Array<string>, dir: string, arch: Arch, scriptGenerator: NsisScriptGenerator) {\n const resourcesDir = path.join(dir, \"resources\")\n const dirInfo = await statOrNull(resourcesDir)\n if (dirInfo == null || !dirInfo.isDirectory()) {\n return\n }\n\n const nodeModules = `${path.sep}node_modules`\n const preCompressedAssets = await walk(resourcesDir, (file, stat) => {\n if (stat.isDirectory()) {\n return !file.endsWith(nodeModules)\n } else {\n return preCompressedFileExtensions.some(it => file.endsWith(it))\n }\n })\n\n if (preCompressedAssets.length !== 0) {\n const macro = new NsisScriptGenerator()\n for (const file of preCompressedAssets) {\n macro.file(`$INSTDIR\\\\${path.relative(dir, file).replace(/\\//g, \"\\\\\")}`, file)\n }\n scriptGenerator.macro(`customFiles_${Arch[arch]}`, macro)\n }\n}\n\nasync function ensureNotBusy(outFile: string) {\n function isBusy(wasBusyBefore: boolean): Promise<boolean> {\n return new Promise((resolve, reject) => {\n fs.open(outFile, \"r+\", (error, fd) => {\n try {\n if (error != null && error.code === \"EBUSY\") {\n if (!wasBusyBefore) {\n log.info({}, \"output file is locked for writing (maybe by virus scanner) => waiting for unlock...\")\n }\n resolve(false)\n } else if (fd == null) {\n resolve(true)\n } else {\n fs.close(fd, () => resolve(true))\n }\n } catch (error) {\n reject(error)\n }\n })\n }).then(result => {\n if (result) {\n return true\n } else {\n return new Promise(resolve => setTimeout(resolve, 2000)).then(() => isBusy(true))\n }\n })\n }\n\n await isBusy(false)\n}\n\nasync function createPackageFileInfo(file: string): Promise<PackageFileInfo> {\n return {\n path: file,\n size: (await stat(file)).size,\n sha512: await hashFile(file),\n }\n}\n"]}
1
+ {"version":3,"file":"NsisTarget.js","sourceRoot":"","sources":["../../../src/targets/nsis/NsisTarget.ts"],"names":[],"mappings":"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","sourcesContent":["import { path7za } from \"7zip-bin\"\nimport BluebirdPromise from \"bluebird-lst\"\nimport { Arch, asArray, AsyncTaskManager, exec, executeAppBuilder, getPlatformIconFileName, InvalidConfigurationError, log, spawnAndWrite, use } from \"builder-util\"\nimport { CURRENT_APP_INSTALLER_FILE_NAME, CURRENT_APP_PACKAGE_FILE_NAME, PackageFileInfo, UUID } from \"builder-util-runtime\"\nimport { exists, statOrNull, walk } from \"builder-util/out/fs\"\nimport _debug from \"debug\"\nimport * as fs from \"fs\"\nimport { readFile, stat, unlink } from \"fs-extra\"\nimport * as path from \"path\"\nimport { getBinFromUrl } from \"../../binDownload\"\nimport { Target } from \"../../core\"\nimport { DesktopShortcutCreationPolicy, getEffectiveOptions } from \"../../options/CommonWindowsInstallerConfiguration\"\nimport { computeSafeArtifactNameIfNeeded, normalizeExt } from \"../../platformPackager\"\nimport { hashFile } from \"../../util/hash\"\nimport { isMacOsCatalina } from \"../../util/macosVersion\"\nimport { time } from \"../../util/timer\"\nimport { execWine } from \"../../wine\"\nimport { WinPackager } from \"../../winPackager\"\nimport { archive, ArchiveOptions } from \"../archive\"\nimport { appendBlockmap, configureDifferentialAwareArchiveOptions, createBlockmap, createNsisWebDifferentialUpdateInfo } from \"../differentialUpdateInfoBuilder\"\nimport { getWindowsInstallationAppPackageName, getWindowsInstallationDirName } from \"../targetUtil\"\nimport { addCustomMessageFileInclude, createAddLangsMacro, LangConfigurator } from \"./nsisLang\"\nimport { computeLicensePage } from \"./nsisLicense\"\nimport { NsisOptions, PortableOptions } from \"./nsisOptions\"\nimport { NsisScriptGenerator } from \"./nsisScriptGenerator\"\nimport { AppPackageHelper, nsisTemplatesDir, NSIS_PATH, UninstallerReader, NsisTargetOptions } from \"./nsisUtil\"\n\nconst debug = _debug(\"electron-builder:nsis\")\n\n// noinspection SpellCheckingInspection\nconst ELECTRON_BUILDER_NS_UUID = UUID.parse(\"50e065bc-3134-11e6-9bab-38c9862bdaf3\")\n\n// noinspection SpellCheckingInspection\nconst nsisResourcePathPromise = () => getBinFromUrl(\"nsis-resources\", \"3.4.1\", \"Dqd6g+2buwwvoG1Vyf6BHR1b+25QMmPcwZx40atOT57gH27rkjOei1L0JTldxZu4NFoEmW4kJgZ3DlSWVON3+Q==\")\n\nconst USE_NSIS_BUILT_IN_COMPRESSOR = false\n\nexport class NsisTarget extends Target {\n readonly options: NsisOptions\n\n /** @private */\n readonly archs: Map<Arch, string> = new Map()\n\n constructor(readonly packager: WinPackager, readonly outDir: string, targetName: string, protected readonly packageHelper: AppPackageHelper) {\n super(targetName)\n\n this.packageHelper.refCount++\n\n this.options =\n targetName === \"portable\"\n ? Object.create(null)\n : {\n preCompressedFileExtensions: [\".avi\", \".mov\", \".m4v\", \".mp4\", \".m4p\", \".qt\", \".mkv\", \".webm\", \".vmdk\"],\n ...this.packager.config.nsis,\n }\n\n if (targetName !== \"nsis\") {\n Object.assign(this.options, (this.packager.config as any)[targetName === \"nsis-web\" ? \"nsisWeb\" : targetName])\n }\n\n const deps = packager.info.metadata.dependencies\n if (deps != null && deps[\"electron-squirrel-startup\"] != null) {\n log.warn('\"electron-squirrel-startup\" dependency is not required for NSIS')\n }\n\n NsisTargetOptions.resolve(this.options)\n }\n\n build(appOutDir: string, arch: Arch) {\n this.archs.set(arch, appOutDir)\n return Promise.resolve()\n }\n\n get isBuildDifferentialAware() {\n return !this.isPortable && this.options.differentialPackage !== false\n }\n\n private getPreCompressedFileExtensions(): Array<string> | null {\n const result = this.isWebInstaller ? null : this.options.preCompressedFileExtensions\n return result == null ? null : asArray(result).map(it => (it.startsWith(\".\") ? it : `.${it}`))\n }\n\n /** @private */\n async buildAppPackage(appOutDir: string, arch: Arch): Promise<PackageFileInfo> {\n const options = this.options\n const packager = this.packager\n\n const isBuildDifferentialAware = this.isBuildDifferentialAware\n const format = !isBuildDifferentialAware && options.useZip ? \"zip\" : \"7z\"\n const archiveFile = path.join(this.outDir, `${packager.appInfo.sanitizedName}-${packager.appInfo.version}-${Arch[arch]}.nsis.${format}`)\n const preCompressedFileExtensions = this.getPreCompressedFileExtensions()\n const archiveOptions: ArchiveOptions = {\n withoutDir: true,\n compression: packager.compression,\n excluded: preCompressedFileExtensions == null ? null : preCompressedFileExtensions.map(it => `*${it}`),\n }\n\n const timer = time(`nsis package, ${Arch[arch]}`)\n await archive(format, archiveFile, appOutDir, isBuildDifferentialAware ? configureDifferentialAwareArchiveOptions(archiveOptions) : archiveOptions)\n timer.end()\n\n if (isBuildDifferentialAware && this.isWebInstaller) {\n const data = await appendBlockmap(archiveFile)\n return {\n ...data,\n path: archiveFile,\n }\n } else {\n return await createPackageFileInfo(archiveFile)\n }\n }\n\n protected get installerFilenamePattern(): string {\n // tslint:disable:no-invalid-template-strings\n return \"${productName} \" + (this.isPortable ? \"\" : \"Setup \") + \"${version}.${ext}\"\n }\n\n private get isPortable() {\n return this.name === \"portable\"\n }\n\n async finishBuild(): Promise<any> {\n try {\n const { pattern } = this.packager.artifactPatternConfig(this.options, this.installerFilenamePattern)\n const builds = new Set([this.archs])\n if (pattern.includes(\"${arch}\") && this.archs.size > 1) {\n ;[...this.archs].forEach(([arch, appOutDir]) => builds.add(new Map().set(arch, appOutDir)))\n }\n const doBuildArchs = builds.values()\n for (const archs of doBuildArchs) {\n await this.buildInstaller(archs)\n }\n } finally {\n await this.packageHelper.finishBuild()\n }\n }\n\n private async buildInstaller(archs: Map<Arch, string>): Promise<any> {\n const primaryArch = archs.size === 1 ? archs.keys().next().value : null\n const packager = this.packager\n const appInfo = packager.appInfo\n const options = this.options\n const installerFilename = packager.expandArtifactNamePattern(\n options,\n \"exe\",\n primaryArch,\n this.installerFilenamePattern,\n false,\n this.packager.platformSpecificBuildOptions.defaultArch\n )\n const oneClick = options.oneClick !== false\n const installerPath = path.join(this.outDir, installerFilename)\n\n const logFields: any = {\n target: this.name,\n file: log.filePath(installerPath),\n archs: Array.from(archs.keys())\n .map(it => Arch[it])\n .join(\", \"),\n }\n const isPerMachine = options.perMachine === true\n\n if (!this.isPortable) {\n logFields.oneClick = oneClick\n logFields.perMachine = isPerMachine\n }\n\n await packager.info.callArtifactBuildStarted(\n {\n targetPresentableName: this.name,\n file: installerPath,\n arch: primaryArch,\n },\n logFields\n )\n\n const guid = options.guid || UUID.v5(appInfo.id, ELECTRON_BUILDER_NS_UUID)\n const uninstallAppKey = guid.replace(/\\\\/g, \" - \")\n const defines: any = {\n APP_ID: appInfo.id,\n APP_GUID: guid,\n // Windows bug - entry in Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall cannot have \\ symbols (dir)\n UNINSTALL_APP_KEY: uninstallAppKey,\n PRODUCT_NAME: appInfo.productName,\n PRODUCT_FILENAME: appInfo.productFilename,\n APP_FILENAME: getWindowsInstallationDirName(appInfo, !oneClick || isPerMachine),\n APP_DESCRIPTION: appInfo.description,\n VERSION: appInfo.version,\n\n PROJECT_DIR: packager.projectDir,\n BUILD_RESOURCES_DIR: packager.info.buildResourcesDir,\n\n APP_PACKAGE_NAME: getWindowsInstallationAppPackageName(appInfo.name),\n }\n if (options.customNsisBinary?.debugLogging) {\n defines.ENABLE_LOGGING_ELECTRON_BUILDER = null\n }\n if (uninstallAppKey !== guid) {\n defines.UNINSTALL_REGISTRY_KEY_2 = `Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Uninstall\\\\${guid}`\n }\n\n const commands: any = {\n OutFile: `\"${installerPath}\"`,\n VIProductVersion: appInfo.getVersionInWeirdWindowsForm(),\n VIAddVersionKey: this.computeVersionKey(),\n Unicode: this.isUnicodeEnabled,\n }\n\n const isPortable = this.isPortable\n const iconPath = (isPortable ? null : await packager.getResource(options.installerIcon, \"installerIcon.ico\")) || (await packager.getIconPath())\n if (iconPath != null) {\n if (isPortable) {\n commands.Icon = `\"${iconPath}\"`\n } else {\n defines.MUI_ICON = iconPath\n defines.MUI_UNICON = iconPath\n }\n }\n\n const packageFiles: { [arch: string]: PackageFileInfo } = {}\n let estimatedSize = 0\n if (this.isPortable && options.useZip) {\n for (const [arch, dir] of archs.entries()) {\n defines[arch === Arch.x64 ? \"APP_DIR_64\" : arch === Arch.arm64 ? \"APP_DIR_ARM64\" : \"APP_DIR_32\"] = dir\n }\n } else if (USE_NSIS_BUILT_IN_COMPRESSOR && archs.size === 1) {\n defines.APP_BUILD_DIR = archs.get(archs.keys().next().value)\n } else {\n await BluebirdPromise.map(archs.keys(), async arch => {\n const fileInfo = await this.packageHelper.packArch(arch, this)\n const file = fileInfo.path\n const defineKey = arch === Arch.x64 ? \"APP_64\" : arch === Arch.arm64 ? \"APP_ARM64\" : \"APP_32\"\n defines[defineKey] = file\n defines[`${defineKey}_NAME`] = path.basename(file)\n // nsis expect a hexadecimal string\n defines[`${defineKey}_HASH`] = Buffer.from(fileInfo.sha512, \"base64\").toString(\"hex\").toUpperCase()\n\n if (this.isWebInstaller) {\n await packager.dispatchArtifactCreated(file, this, arch)\n packageFiles[Arch[arch]] = fileInfo\n }\n\n const archiveInfo = (await exec(path7za, [\"l\", file])).trim()\n // after adding blockmap data will be \"Warnings: 1\" in the end of output\n const match = /(\\d+)\\s+\\d+\\s+\\d+\\s+files/.exec(archiveInfo)\n if (match == null) {\n log.warn({ output: archiveInfo }, \"cannot compute size of app package\")\n } else {\n estimatedSize += parseInt(match[1], 10)\n }\n })\n }\n\n this.configureDefinesForAllTypeOfInstaller(defines)\n if (isPortable) {\n const { unpackDirName, requestExecutionLevel, splashImage } = options as PortableOptions\n defines.REQUEST_EXECUTION_LEVEL = requestExecutionLevel || \"user\"\n\n // https://github.com/electron-userland/electron-builder/issues/5764\n if (typeof unpackDirName === \"string\" || !unpackDirName) {\n defines.UNPACK_DIR_NAME = unpackDirName || (await executeAppBuilder([\"ksuid\"]))\n }\n\n if (splashImage != null) {\n defines.SPLASH_IMAGE = path.resolve(packager.projectDir, splashImage)\n }\n } else {\n await this.configureDefines(oneClick, defines)\n }\n\n if (estimatedSize !== 0) {\n // in kb\n defines.ESTIMATED_SIZE = Math.round(estimatedSize / 1024)\n }\n\n if (packager.compression === \"store\") {\n commands.SetCompress = \"off\"\n } else {\n // difference - 33.540 vs 33.601, only 61 KB (but zip is faster to decompress)\n // do not use /SOLID - \"With solid compression, files are uncompressed to temporary file before they are copied to their final destination\",\n // it is not good for portable installer (where built-in NSIS compression is used). http://forums.winamp.com/showpost.php?p=2982902&postcount=6\n commands.SetCompressor = \"zlib\"\n if (!this.isWebInstaller) {\n defines.COMPRESS = \"auto\"\n }\n }\n\n debug(defines)\n debug(commands)\n\n if (packager.packagerOptions.effectiveOptionComputed != null && (await packager.packagerOptions.effectiveOptionComputed([defines, commands]))) {\n return\n }\n\n // prepare short-version variants of defines and commands, to make an uninstaller that doesn't differ much from the previous one\n const definesUninstaller: any = { ...defines }\n const commandsUninstaller: any = { ...commands }\n if (appInfo.shortVersion != null) {\n definesUninstaller.VERSION = appInfo.shortVersion\n commandsUninstaller.VIProductVersion = appInfo.shortVersionWindows\n commandsUninstaller.VIAddVersionKey = this.computeVersionKey(true)\n }\n\n const sharedHeader = await this.computeCommonInstallerScriptHeader()\n const script = isPortable\n ? await readFile(path.join(nsisTemplatesDir, \"portable.nsi\"), \"utf8\")\n : await this.computeScriptAndSignUninstaller(definesUninstaller, commandsUninstaller, installerPath, sharedHeader, archs)\n\n // copy outfile name into main options, as the computeScriptAndSignUninstaller function was kind enough to add important data to temporary defines.\n defines.UNINSTALLER_OUT_FILE = definesUninstaller.UNINSTALLER_OUT_FILE\n\n await this.executeMakensis(defines, commands, sharedHeader + (await this.computeFinalScript(script, true, archs)))\n await Promise.all<any>([packager.sign(installerPath), defines.UNINSTALLER_OUT_FILE == null ? Promise.resolve() : unlink(defines.UNINSTALLER_OUT_FILE)])\n\n const safeArtifactName = computeSafeArtifactNameIfNeeded(installerFilename, () => this.generateGitHubInstallerName())\n let updateInfo: any\n if (this.isWebInstaller) {\n updateInfo = createNsisWebDifferentialUpdateInfo(installerPath, packageFiles)\n } else if (this.isBuildDifferentialAware) {\n updateInfo = await createBlockmap(installerPath, this, packager, safeArtifactName)\n }\n\n if (updateInfo != null && isPerMachine && (oneClick || options.packElevateHelper)) {\n updateInfo.isAdminRightsRequired = true\n }\n\n await packager.info.callArtifactBuildCompleted({\n file: installerPath,\n updateInfo,\n target: this,\n packager,\n arch: primaryArch,\n safeArtifactName,\n isWriteUpdateInfo: !this.isPortable,\n })\n }\n\n protected generateGitHubInstallerName() {\n const appInfo = this.packager.appInfo\n const classifier = appInfo.name.toLowerCase() === appInfo.name ? \"setup-\" : \"Setup-\"\n return `${appInfo.name}-${this.isPortable ? \"\" : classifier}${appInfo.version}.exe`\n }\n\n private get isUnicodeEnabled() {\n return this.options.unicode !== false\n }\n\n get isWebInstaller(): boolean {\n return false\n }\n\n private async computeScriptAndSignUninstaller(defines: any, commands: any, installerPath: string, sharedHeader: string, archs: Map<Arch, string>) {\n const packager = this.packager\n const customScriptPath = await packager.getResource(this.options.script, \"installer.nsi\")\n const script = await readFile(customScriptPath || path.join(nsisTemplatesDir, \"installer.nsi\"), \"utf8\")\n\n if (customScriptPath != null) {\n log.info({ reason: \"custom NSIS script is used\" }, \"uninstaller is not signed by electron-builder\")\n return script\n }\n\n // https://github.com/electron-userland/electron-builder/issues/2103\n // it is more safe and reliable to write uninstaller to our out dir\n const uninstallerPath = path.join(this.outDir, `__uninstaller-${this.name}-${this.packager.appInfo.sanitizedName}.exe`)\n const isWin = process.platform === \"win32\"\n defines.BUILD_UNINSTALLER = null\n defines.UNINSTALLER_OUT_FILE = isWin ? uninstallerPath : path.win32.join(\"Z:\", uninstallerPath)\n await this.executeMakensis(defines, commands, sharedHeader + (await this.computeFinalScript(script, false, archs)))\n\n // http://forums.winamp.com/showthread.php?p=3078545\n if (isMacOsCatalina()) {\n try {\n await UninstallerReader.exec(installerPath, uninstallerPath)\n } catch (error: any) {\n log.warn(`packager.vm is used: ${error.message}`)\n\n const vm = await packager.vm.value\n await vm.exec(installerPath, [])\n // Parallels VM can exit after command execution, but NSIS continue to be running\n let i = 0\n while (!(await exists(uninstallerPath)) && i++ < 100) {\n // noinspection JSUnusedLocalSymbols\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n await new Promise((resolve, _reject) => setTimeout(resolve, 300))\n }\n }\n } else {\n await execWine(installerPath, null, [], { env: { __COMPAT_LAYER: \"RunAsInvoker\" } })\n }\n await packager.sign(uninstallerPath, \" Signing NSIS uninstaller\")\n\n delete defines.BUILD_UNINSTALLER\n // platform-specific path, not wine\n defines.UNINSTALLER_OUT_FILE = uninstallerPath\n return script\n }\n\n private computeVersionKey(short = false) {\n // Error: invalid VIProductVersion format, should be X.X.X.X\n // so, we must strip beta\n const localeId = this.options.language || \"1033\"\n const appInfo = this.packager.appInfo\n const versionKey = [\n `/LANG=${localeId} ProductName \"${appInfo.productName}\"`,\n `/LANG=${localeId} ProductVersion \"${appInfo.version}\"`,\n `/LANG=${localeId} LegalCopyright \"${appInfo.copyright}\"`,\n `/LANG=${localeId} FileDescription \"${appInfo.description}\"`,\n `/LANG=${localeId} FileVersion \"${appInfo.buildVersion}\"`,\n ]\n if (short) {\n versionKey[1] = `/LANG=${localeId} ProductVersion \"${appInfo.shortVersion}\"`\n versionKey[4] = `/LANG=${localeId} FileVersion \"${appInfo.shortVersion}\"`\n }\n use(this.packager.platformSpecificBuildOptions.legalTrademarks, it => versionKey.push(`/LANG=${localeId} LegalTrademarks \"${it}\"`))\n use(appInfo.companyName, it => versionKey.push(`/LANG=${localeId} CompanyName \"${it}\"`))\n return versionKey\n }\n\n protected configureDefines(oneClick: boolean, defines: any): Promise<any> {\n const packager = this.packager\n const options = this.options\n\n const asyncTaskManager = new AsyncTaskManager(packager.info.cancellationToken)\n\n if (oneClick) {\n defines.ONE_CLICK = null\n\n if (options.runAfterFinish !== false) {\n defines.RUN_AFTER_FINISH = null\n }\n\n asyncTaskManager.add(async () => {\n const installerHeaderIcon = await packager.getResource(options.installerHeaderIcon, \"installerHeaderIcon.ico\")\n if (installerHeaderIcon != null) {\n defines.HEADER_ICO = installerHeaderIcon\n }\n })\n } else {\n if (options.runAfterFinish === false) {\n defines.HIDE_RUN_AFTER_FINISH = null\n }\n\n asyncTaskManager.add(async () => {\n const installerHeader = await packager.getResource(options.installerHeader, \"installerHeader.bmp\")\n if (installerHeader != null) {\n defines.MUI_HEADERIMAGE = null\n defines.MUI_HEADERIMAGE_RIGHT = null\n defines.MUI_HEADERIMAGE_BITMAP = installerHeader\n }\n })\n\n asyncTaskManager.add(async () => {\n const bitmap = (await packager.getResource(options.installerSidebar, \"installerSidebar.bmp\")) || \"${NSISDIR}\\\\Contrib\\\\Graphics\\\\Wizard\\\\nsis3-metro.bmp\"\n defines.MUI_WELCOMEFINISHPAGE_BITMAP = bitmap\n defines.MUI_UNWELCOMEFINISHPAGE_BITMAP = (await packager.getResource(options.uninstallerSidebar, \"uninstallerSidebar.bmp\")) || bitmap\n })\n\n if (options.allowElevation !== false) {\n defines.MULTIUSER_INSTALLMODE_ALLOW_ELEVATION = null\n }\n }\n\n if (options.perMachine === true) {\n defines.INSTALL_MODE_PER_ALL_USERS = null\n }\n\n if (!oneClick || options.perMachine === true) {\n defines.INSTALL_MODE_PER_ALL_USERS_REQUIRED = null\n }\n\n if (options.allowToChangeInstallationDirectory) {\n if (oneClick) {\n throw new InvalidConfigurationError(\"allowToChangeInstallationDirectory makes sense only for assisted installer (please set oneClick to false)\")\n }\n defines.allowToChangeInstallationDirectory = null\n }\n\n const commonOptions = getEffectiveOptions(options, packager)\n\n if (commonOptions.menuCategory != null) {\n defines.MENU_FILENAME = commonOptions.menuCategory\n }\n\n defines.SHORTCUT_NAME = commonOptions.shortcutName\n\n if (options.deleteAppDataOnUninstall) {\n defines.DELETE_APP_DATA_ON_UNINSTALL = null\n }\n\n asyncTaskManager.add(async () => {\n const uninstallerIcon = await packager.getResource(options.uninstallerIcon, \"uninstallerIcon.ico\")\n if (uninstallerIcon != null) {\n // we don't need to copy MUI_UNICON (defaults to app icon), so, we have 2 defines\n defines.UNINSTALLER_ICON = uninstallerIcon\n defines.MUI_UNICON = uninstallerIcon\n }\n })\n\n defines.UNINSTALL_DISPLAY_NAME = packager.expandMacro(options.uninstallDisplayName || \"${productName} ${version}\", null, {}, false)\n if (commonOptions.isCreateDesktopShortcut === DesktopShortcutCreationPolicy.NEVER) {\n defines.DO_NOT_CREATE_DESKTOP_SHORTCUT = null\n }\n if (commonOptions.isCreateDesktopShortcut === DesktopShortcutCreationPolicy.ALWAYS) {\n defines.RECREATE_DESKTOP_SHORTCUT = null\n }\n if (!commonOptions.isCreateStartMenuShortcut) {\n defines.DO_NOT_CREATE_START_MENU_SHORTCUT = null\n }\n\n if (options.displayLanguageSelector === true) {\n defines.DISPLAY_LANG_SELECTOR = null\n }\n\n return asyncTaskManager.awaitTasks()\n }\n\n private configureDefinesForAllTypeOfInstaller(defines: any) {\n const appInfo = this.packager.appInfo\n const companyName = appInfo.companyName\n if (companyName != null) {\n defines.COMPANY_NAME = companyName\n }\n\n // electron uses product file name as app data, define it as well to remove on uninstall\n if (defines.APP_FILENAME !== appInfo.productFilename) {\n defines.APP_PRODUCT_FILENAME = appInfo.productFilename\n }\n\n if (this.isWebInstaller) {\n defines.APP_PACKAGE_STORE_FILE = `${appInfo.updaterCacheDirName}\\\\${CURRENT_APP_PACKAGE_FILE_NAME}`\n } else {\n defines.APP_INSTALLER_STORE_FILE = `${appInfo.updaterCacheDirName}\\\\${CURRENT_APP_INSTALLER_FILE_NAME}`\n }\n\n if (!this.isWebInstaller && defines.APP_BUILD_DIR == null) {\n const options = this.options\n if (options.useZip) {\n defines.ZIP_COMPRESSION = null\n }\n\n defines.COMPRESSION_METHOD = options.useZip ? \"zip\" : \"7z\"\n }\n }\n\n private async executeMakensis(defines: any, commands: any, script: string) {\n const args: Array<string> = this.options.warningsAsErrors === false ? [] : [\"-WX\"]\n args.push(\"-INPUTCHARSET\", \"UTF8\")\n for (const name of Object.keys(defines)) {\n const value = defines[name]\n if (value == null) {\n args.push(`-D${name}`)\n } else {\n args.push(`-D${name}=${value}`)\n }\n }\n\n for (const name of Object.keys(commands)) {\n const value = commands[name]\n if (Array.isArray(value)) {\n for (const c of value) {\n args.push(`-X${name} ${c}`)\n }\n } else {\n args.push(`-X${name} ${value}`)\n }\n }\n\n args.push(\"-\")\n\n if (this.packager.debugLogger.isEnabled) {\n this.packager.debugLogger.add(\"nsis.script\", script)\n }\n\n const nsisPath = await NSIS_PATH()\n const command = path.join(\n nsisPath,\n process.platform === \"darwin\" ? \"mac\" : process.platform === \"win32\" ? \"Bin\" : \"linux\",\n process.platform === \"win32\" ? \"makensis.exe\" : \"makensis\"\n )\n\n // if (process.platform === \"win32\") {\n // fix for an issue caused by virus scanners, locking the file during write\n // https://github.com/electron-userland/electron-builder/issues/5005\n await ensureNotBusy(commands[\"OutFile\"].replace(/\"/g, \"\"))\n // }\n\n await spawnAndWrite(command, args, script, {\n // we use NSIS_CONFIG_CONST_DATA_PATH=no to build makensis on Linux, but in any case it doesn't use stubs as MacOS/Windows version, so, we explicitly set NSISDIR\n env: { ...process.env, NSISDIR: nsisPath },\n cwd: nsisTemplatesDir,\n })\n }\n\n private async computeCommonInstallerScriptHeader() {\n const packager = this.packager\n const options = this.options\n const scriptGenerator = new NsisScriptGenerator()\n const langConfigurator = new LangConfigurator(options)\n\n scriptGenerator.include(path.join(nsisTemplatesDir, \"include\", \"StdUtils.nsh\"))\n\n const includeDir = path.join(nsisTemplatesDir, \"include\")\n scriptGenerator.addIncludeDir(includeDir)\n scriptGenerator.flags([\"updated\", \"force-run\", \"keep-shortcuts\", \"no-desktop-shortcut\", \"delete-app-data\", \"allusers\", \"currentuser\"])\n\n createAddLangsMacro(scriptGenerator, langConfigurator)\n\n const taskManager = new AsyncTaskManager(packager.info.cancellationToken)\n\n const pluginArch = this.isUnicodeEnabled ? \"x86-unicode\" : \"x86-ansi\"\n taskManager.add(async () => {\n scriptGenerator.addPluginDir(pluginArch, path.join(await nsisResourcePathPromise(), \"plugins\", pluginArch))\n })\n\n taskManager.add(async () => {\n const userPluginDir = path.join(packager.info.buildResourcesDir, pluginArch)\n const stat = await statOrNull(userPluginDir)\n if (stat != null && stat.isDirectory()) {\n scriptGenerator.addPluginDir(pluginArch, userPluginDir)\n }\n })\n\n taskManager.addTask(addCustomMessageFileInclude(\"messages.yml\", packager, scriptGenerator, langConfigurator))\n\n if (!this.isPortable) {\n if (options.oneClick === false) {\n taskManager.addTask(addCustomMessageFileInclude(\"assistedMessages.yml\", packager, scriptGenerator, langConfigurator))\n }\n\n taskManager.add(async () => {\n const customInclude = await packager.getResource(this.options.include, \"installer.nsh\")\n if (customInclude != null) {\n scriptGenerator.addIncludeDir(packager.info.buildResourcesDir)\n scriptGenerator.include(customInclude)\n }\n })\n }\n\n await taskManager.awaitTasks()\n return scriptGenerator.build()\n }\n\n private async computeFinalScript(originalScript: string, isInstaller: boolean, archs: Map<Arch, string>) {\n const packager = this.packager\n const options = this.options\n const langConfigurator = new LangConfigurator(options)\n\n const scriptGenerator = new NsisScriptGenerator()\n const taskManager = new AsyncTaskManager(packager.info.cancellationToken)\n\n if (isInstaller) {\n // http://stackoverflow.com/questions/997456/nsis-license-file-based-on-language-selection\n taskManager.add(() => computeLicensePage(packager, options, scriptGenerator, langConfigurator.langs))\n }\n\n await taskManager.awaitTasks()\n\n if (this.isPortable) {\n return scriptGenerator.build() + originalScript\n }\n\n const preCompressedFileExtensions = this.getPreCompressedFileExtensions()\n if (preCompressedFileExtensions != null && preCompressedFileExtensions.length !== 0) {\n for (const [arch, dir] of archs.entries()) {\n await generateForPreCompressed(preCompressedFileExtensions, dir, arch, scriptGenerator)\n }\n }\n\n const fileAssociations = packager.fileAssociations\n if (fileAssociations.length !== 0) {\n scriptGenerator.include(path.join(path.join(nsisTemplatesDir, \"include\"), \"FileAssociation.nsh\"))\n if (isInstaller) {\n const registerFileAssociationsScript = new NsisScriptGenerator()\n for (const item of fileAssociations) {\n const extensions = asArray(item.ext).map(normalizeExt)\n for (const ext of extensions) {\n const customIcon = await packager.getResource(getPlatformIconFileName(item.icon, false), `${extensions[0]}.ico`)\n let installedIconPath = \"$appExe,0\"\n if (customIcon != null) {\n installedIconPath = `$INSTDIR\\\\resources\\\\${path.basename(customIcon)}`\n registerFileAssociationsScript.file(installedIconPath, customIcon)\n }\n\n const icon = `\"${installedIconPath}\"`\n const commandText = `\"Open with ${packager.appInfo.productName}\"`\n const command = '\"$appExe $\\\\\"%1$\\\\\"\"'\n registerFileAssociationsScript.insertMacro(\"APP_ASSOCIATE\", `\"${ext}\" \"${item.name || ext}\" \"${item.description || \"\"}\" ${icon} ${commandText} ${command}`)\n }\n }\n scriptGenerator.macro(\"registerFileAssociations\", registerFileAssociationsScript)\n } else {\n const unregisterFileAssociationsScript = new NsisScriptGenerator()\n for (const item of fileAssociations) {\n for (const ext of asArray(item.ext)) {\n unregisterFileAssociationsScript.insertMacro(\"APP_UNASSOCIATE\", `\"${normalizeExt(ext)}\" \"${item.name || ext}\"`)\n }\n }\n scriptGenerator.macro(\"unregisterFileAssociations\", unregisterFileAssociationsScript)\n }\n }\n\n return scriptGenerator.build() + originalScript\n }\n}\n\nasync function generateForPreCompressed(preCompressedFileExtensions: Array<string>, dir: string, arch: Arch, scriptGenerator: NsisScriptGenerator) {\n const resourcesDir = path.join(dir, \"resources\")\n const dirInfo = await statOrNull(resourcesDir)\n if (dirInfo == null || !dirInfo.isDirectory()) {\n return\n }\n\n const nodeModules = `${path.sep}node_modules`\n const preCompressedAssets = await walk(resourcesDir, (file, stat) => {\n if (stat.isDirectory()) {\n return !file.endsWith(nodeModules)\n } else {\n return preCompressedFileExtensions.some(it => file.endsWith(it))\n }\n })\n\n if (preCompressedAssets.length !== 0) {\n const macro = new NsisScriptGenerator()\n for (const file of preCompressedAssets) {\n macro.file(`$INSTDIR\\\\${path.relative(dir, file).replace(/\\//g, \"\\\\\")}`, file)\n }\n scriptGenerator.macro(`customFiles_${Arch[arch]}`, macro)\n }\n}\n\nasync function ensureNotBusy(outFile: string) {\n function isBusy(wasBusyBefore: boolean): Promise<boolean> {\n return new Promise((resolve, reject) => {\n fs.open(outFile, \"r+\", (error, fd) => {\n try {\n if (error != null && error.code === \"EBUSY\") {\n if (!wasBusyBefore) {\n log.info({}, \"output file is locked for writing (maybe by virus scanner) => waiting for unlock...\")\n }\n resolve(false)\n } else if (fd == null) {\n resolve(true)\n } else {\n fs.close(fd, () => resolve(true))\n }\n } catch (error) {\n reject(error)\n }\n })\n }).then(result => {\n if (result) {\n return true\n } else {\n return new Promise(resolve => setTimeout(resolve, 2000)).then(() => isBusy(true))\n }\n })\n }\n\n await isBusy(false)\n}\n\nasync function createPackageFileInfo(file: string): Promise<PackageFileInfo> {\n return {\n path: file,\n size: (await stat(file)).size,\n sha512: await hashFile(file),\n }\n}\n"]}
package/out/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const PACKAGE_VERSION = "23.0.4";
1
+ export declare const PACKAGE_VERSION = "23.0.8";
package/out/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PACKAGE_VERSION = void 0;
4
- exports.PACKAGE_VERSION = "23.0.4";
4
+ exports.PACKAGE_VERSION = "23.0.8";
5
5
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,QAAQ,CAAA","sourcesContent":["export const PACKAGE_VERSION = \"23.0.4\"\n"]}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":";;;AAAa,QAAA,eAAe,GAAG,QAAQ,CAAA","sourcesContent":["export const PACKAGE_VERSION = \"23.0.8\"\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "app-builder-lib",
3
3
  "description": "electron-builder lib",
4
- "version": "23.0.4",
4
+ "version": "23.0.8",
5
5
  "main": "out/index.js",
6
6
  "files": [
7
7
  "out",
@@ -53,24 +53,25 @@
53
53
  "@malept/flatpak-bundler": "^0.4.0",
54
54
  "async-exit-hook": "^2.0.1",
55
55
  "bluebird-lst": "^1.0.9",
56
- "builder-util": "23.0.2",
57
- "builder-util-runtime": "9.0.0",
56
+ "builder-util": "23.0.8",
57
+ "builder-util-runtime": "9.0.2",
58
58
  "chromium-pickle-js": "^0.2.0",
59
- "debug": "^4.3.2",
60
- "ejs": "^3.1.6",
59
+ "debug": "^4.3.4",
60
+ "ejs": "^3.1.7",
61
61
  "electron-osx-sign": "^0.6.0",
62
- "electron-publish": "23.0.2",
62
+ "electron-publish": "23.0.8",
63
63
  "form-data": "^4.0.0",
64
- "fs-extra": "^10.0.0",
65
- "hosted-git-info": "^4.0.2",
64
+ "fs-extra": "^10.1.0",
65
+ "hosted-git-info": "^4.1.0",
66
66
  "is-ci": "^3.0.0",
67
- "isbinaryfile": "^4.0.8",
67
+ "isbinaryfile": "^4.0.10",
68
68
  "js-yaml": "^4.1.0",
69
69
  "lazy-val": "^1.0.5",
70
- "minimatch": "^3.0.4",
70
+ "minimatch": "^3.1.2",
71
71
  "read-config-file": "6.2.0",
72
72
  "sanitize-filename": "^1.6.3",
73
- "semver": "^7.3.5",
73
+ "semver": "^7.3.7",
74
+ "tar": "^6.1.11",
74
75
  "temp-file": "^3.4.0"
75
76
  },
76
77
  "///": "babel in devDependencies for proton tests",
@@ -101,8 +102,9 @@
101
102
  "@types/is-ci": "3.0.0",
102
103
  "@types/js-yaml": "4.0.3",
103
104
  "@types/semver": "7.3.8",
104
- "dmg-builder": "23.0.4",
105
- "electron-builder-squirrel-windows": "23.0.4"
105
+ "@types/tar": "^6.1.1",
106
+ "dmg-builder": "23.0.8",
107
+ "electron-builder-squirrel-windows": "23.0.8"
106
108
  },
107
109
  "//": "electron-builder-squirrel-windows and dmg-builder added as dev dep for tests (as otherwise `require` doesn't work using Yarn 2)",
108
110
  "typings": "./out/index.d.ts"
package/scheme.json CHANGED
@@ -4240,7 +4240,22 @@
4240
4240
  "type": "object"
4241
4241
  },
4242
4242
  "OutgoingHttpHeaders": {
4243
- "additionalProperties": false,
4243
+ "additionalProperties": {
4244
+ "anyOf": [
4245
+ {
4246
+ "items": {
4247
+ "type": "string"
4248
+ },
4249
+ "type": "array"
4250
+ },
4251
+ {
4252
+ "type": [
4253
+ "string",
4254
+ "number"
4255
+ ]
4256
+ }
4257
+ ]
4258
+ },
4244
4259
  "type": "object"
4245
4260
  },
4246
4261
  "PkgBackgroundOptions": {
@@ -4405,7 +4420,7 @@
4405
4420
  "type": "null"
4406
4421
  }
4407
4422
  ],
4408
- "description": "Identifies applications that must be closed before the package is installed.\\n\\nCorresponds to [must-close](https://developer.apple.com/library/archive/documentation/DeveloperTools/Reference/DistributionDefinitionRef/Chapters/Distribution_XML_Ref.html#//apple_ref/doc/uid/TP40005370-CH100-SW77)"
4423
+ "description": "Identifies applications that must be closed before the package is installed.\n\nCorresponds to [must-close](https://developer.apple.com/library/archive/documentation/DeveloperTools/Reference/DistributionDefinitionRef/Chapters/Distribution_XML_Ref.html#//apple_ref/doc/uid/TP40005370-CH100-SW77)."
4409
4424
  },
4410
4425
  "overwriteAction": {
4411
4426
  "anyOf": [
@@ -1,5 +1,10 @@
1
- It is developer documentation. See [user documentation](https://electron.build/configuration/nsis).
1
+ # NSIS
2
2
 
3
+ ⚠️ **It is developer documentation.** If your are looking for usage guide, see [user documentation](https://electron.build/configuration/nsis).
4
+
5
+ NSIS stands for Nullsoft Scriptable Install System. electron-builder utilizes a [customized version](https://github.com/electron-userland/electron-builder-binaries) of it and uses `NsisMultiUser` plugin to handle installation for single user or all users on the computer.
6
+
7
+ ## Some links
3
8
  http://www.mathiaswestin.net/2012/09/how-to-make-per-user-installation-with.html
4
9
 
5
10
  https://msdn.microsoft.com/en-us/library/windows/desktop/dd378457(v=vs.85).aspx#FOLDERID_UserProgramFiles
@@ -12,7 +17,13 @@ http://stackoverflow.com/questions/2565215/checking-if-the-application-is-runnin
12
17
 
13
18
  One-click installer: http://forums.winamp.com/showthread.php?t=300479
14
19
 
15
- # GUID
20
+ ## Localization (l10n)
21
+
22
+ For translators, the strings to be displayed are included in [`assistedMessages.yml`](https://github.com/electron-userland/electron-builder/blob/master/packages/app-builder-lib/templates/nsis/assistedMessages.yml) and [`messages.yml`]https://github.com/electron-userland/electron-builder/blob/master/packages/app-builder-lib/templates/nsis/messages.yml).
23
+
24
+ As for other strings in NSIS, head to [electron-userland/electron-builder-binaries](https://github.com/electron-userland/electron-builder-binaries) or the upstream repository on [Sorceforge](https://sourceforge.net/p/nsis/code/HEAD/tree/).
25
+
26
+ ## GUID
16
27
  See [docs](https://electron.build/configuration/nsis).
17
28
 
18
29
  We use UUID v5 to generate sha-1 name-based UUID.
@@ -21,7 +32,7 @@ http://stackoverflow.com/questions/3029994/convert-uri-to-guid
21
32
  https://alexandrebrisebois.wordpress.com/2013/11/14/create-predictable-guids-for-your-windows-azure-table-storage-entities/
22
33
  https://github.com/Squirrel/Squirrel.Windows/pull/658
23
34
 
24
- # Compression
35
+ ## Compression
25
36
 
26
37
  NSIS LZMA compression is slower and worse compared to external `7za` compression. Slower because `7za` is multi-threaded, worse because LZMA codec implementation is outdated and BCJ2 filter is not enabled.
27
38
  Difference for test app — 4 MB (before: 36.3 after: 32.8).
@@ -31,7 +31,7 @@ chooseUninstallationOptions:
31
31
  hu_HU: Eltávolítási opciók kiválasztása
32
32
  pt_BR: Escolha uma opção de desinstalação
33
33
  zh_CN: 卸载选项
34
- zh_TW: 卸載選項
34
+ zh_TW: 解除安裝選項
35
35
  tr_TR: Kaldırma Ayarlarını Seçin
36
36
  sv_SE: Välj alternativ för avinstallation
37
37
  pl_PL: Wybierz opcje dezinstalacji
@@ -75,7 +75,7 @@ whoShouldThisApplicationBeInstalledFor:
75
75
  hu_HU: Kinek legyen ez az alkalmazás telepítve?
76
76
  pt_BR: Para quem esta aplicação deve ser instalada?
77
77
  zh_CN: 为哪位用户安装该应用?
78
- zh_TW: 為哪位用戶安裝該應用?
78
+ zh_TW: 需要為哪位使用者安裝該應用程式?
79
79
  tr_TR: Bu Uygulama Kimler için Kurulsun?
80
80
  sv_SE: Vem ska den här applikationen installeras för?
81
81
  pl_PL: Dla kogo zainstalować tę aplikację?
@@ -97,7 +97,7 @@ selectUserMode:
97
97
  hu_HU: Válaszd ki, hogy a szoftver elérhető legyen-e minden felhasználó számára, vagy csak neked
98
98
  pt_BR: Por favor, selecione se este software deve estar disponível apenas para você ou para todos usuários
99
99
  zh_CN: 请选择为当前用户还是所有用户安装该软件
100
- zh_TW: 請選擇為當前用戶還是所有用戶安裝該軟件
100
+ zh_TW: 請選擇為目前使用者還是所有使用者安裝該軟體
101
101
  tr_TR: Lütfen bu yazılımı tüm kullanıcılar için mi yoksa sadece kendiniz mi kullanmak istediğinizi seçin
102
102
  sv_SE: Välj om du vill göra den här mjukvaran tillgänglig för alla användare eller bara för dig
103
103
  pl_PL: Wybierz, czy to oprogramowanie ma być dostępne dla wszystkich użytkowników, czy tylko dla Ciebie
@@ -119,7 +119,7 @@ whichInstallationRemove:
119
119
  hu_HU: Ez a szoftver számítógépenként (minden felhasználó) és felhasználónként is telepítve van.\nMelyik telepítést szeretnéd eltávolítani?
120
120
  pt_BR: Este software é instalado por máquina (todos os usuários) e por usuário. Qual instalação você deseja remover?
121
121
  zh_CN: 该软件已为所有用户和当前用户安装.\n您希望移除哪个安装?
122
- zh_TW: 該軟件已為所有用戶和當前用戶安裝.\n您希望移除哪個安裝?
122
+ zh_TW: 該軟體已為所有使用者和目前使用者安裝。\n您希望移除哪一個?
123
123
  tr_TR: Bu yazılım hem makine başına (tüm kullanıcılar) hem de kullanıcı başına yüklenir.\nKaldırmak istediğiniz kurulum?
124
124
  sv_SE: Den här mjukvaran är installerad både ”per dator” (alla användare) och ”per användare”.\nVilken installation vill du ta bort?
125
125
  pl_PL: To oprogramowanie zostało zainstalowane zarówno dla urządzenia (wszyscy użytkownicy), jak i dla użytkownika.\nKtórą instalację chcesz usunąć?
@@ -141,7 +141,7 @@ freshInstallForAll:
141
141
  hu_HU: Új telepítés minden felhasználó számára. (Az adminisztrátor hitelesítő adataira lesz szükség.)
142
142
  pt_BR: Instalação limpa para todos os usuários. (irá solicitar credenciais de administrador)
143
143
  zh_CN: 为所有用户进行全新安装. (需要管理员资格)
144
- zh_TW: 為所有用戶進行全新安裝. (需要管理員資格)
144
+ zh_TW: 為所有使用者進行全新安裝 (需要系統管理員權限)
145
145
  tr_TR: Tüm kullanıcılar için yeni yükleme. (yönetici kimlik bilgilerini soracaktır)
146
146
  sv_SE: Ny installation för alla användare. (kommer att begära adminbehörighet)
147
147
  pl_PL: Nowa instalacja dla wszystkich użytkowników (potrzebne będą dane administratora).
@@ -162,7 +162,7 @@ freshInstallForCurrent:
162
162
  hu_HU: Új telepítés csak a jelenlegi felhasználó számára.
163
163
  pt_BR: Instalação limpa somente para o usuário atual.
164
164
  zh_CN: 仅为当前用户进行全新安装.
165
- zh_TW: 僅為當前用戶進行全新安裝.
165
+ zh_TW: 僅為目前使用者進行全新安裝
166
166
  tr_TR: Sadece mevcut kullanıcı için yeni yükleme.
167
167
  sv_SE: Ny installation endast för den aktuella användaren.
168
168
  pl_PL: Nowa instalacja wyłącznie dla obecnego użytkownika.
@@ -206,7 +206,7 @@ forAll:
206
206
  hu_HU: Bárki számára, aki ezt a számítógépet használja (minden felhasználó)
207
207
  pt_BR: Para todos que usam esta máquina (&todos os usuários)
208
208
  zh_CN: 为使用这台电脑的任何人安装 (所有用户)
209
- zh_TW: 為使用這台電腦的任何人安裝 (所有用戶)
209
+ zh_TW: 為使用這台電腦的任何人安裝 (所有使用者)
210
210
  tr_TR: Bu bilgisayarı kullanan herkes (ve tüm kullanıcılar)
211
211
  sv_SE: Alla som använder den här datorn (alla användare)
212
212
  pl_PL: Każdy korzystający z tego komputera (wszyscy użytkownicy)
@@ -228,7 +228,7 @@ loginWithAdminAccount:
228
228
  hu_HU: A folytatáshoz adminisztrátori jogokkal rendelkező fiókkal kell bejelentkezned...
229
229
  pt_BR: Você precisa realizar o login com uma conta que é membro do grupo de administração para continuar...
230
230
  zh_CN: 您需要用属于管理员群组的用户账户登录来继续...
231
- zh_TW: 您需要用屬於管理員群組的用戶賬戶登錄來繼續...
231
+ zh_TW: 您需要以具系統管理員身分的帳號登入才能繼續...
232
232
  tr_TR: Devam etmek için yönetici grubunun üyesi olan bir hesapla giriş yapmanız gerekiyor..
233
233
  sv_SE: Du måste logga in med ett konto som är medlem i admingruppen för att fortsätta...
234
234
  pl_PL: Musisz się zalogować za pomocą konta będącego członkiem grupy administratora, by kontynuować...
@@ -249,7 +249,7 @@ perUserInstallExists:
249
249
  hu_HU: Már van egy felhasználónkénti telepítés.
250
250
  pt_BR: Já existe uma instalação por usuário.
251
251
  zh_CN: 已经存在一个安装到当前用户的安装.
252
- zh_TW: 已經存在一個安裝到當前用戶的安裝.
252
+ zh_TW: 已經為目前使用者安裝過該軟體
253
253
  tr_TR: Her kullanıcı için zaten bir kurulum var.
254
254
  sv_SE: Det finns redan en ”per användare”-installation.
255
255
  pl_PL: Instalacja dla użytkownika już istnieje.
@@ -270,7 +270,7 @@ perUserInstall:
270
270
  hu_HU: Van felhasználónkénti telepítés.
271
271
  pt_BR: Existe uma instalação por usuário.
272
272
  zh_CN: 存在一个安装到当前用户的安装.
273
- zh_TW: 存在一個安裝到當前用戶的安裝.
273
+ zh_TW: 存在一個對目前使用者的安裝
274
274
  tr_TR: Kullanıcı başına bir kurulum var.
275
275
  sv_SE: Det finns en ”per användare”-installation.
276
276
  pl_PL: Instalacja dla użytkownika istnieje.
@@ -291,7 +291,7 @@ perMachineInstallExists:
291
291
  hu_HU: Már van egy számítógépenkénti telepítés.
292
292
  pt_BR: Já existe uma instalação por máquina.
293
293
  zh_CN: 已经存在一个安装到所有用户的安装.
294
- zh_TW: 已經存在一個安裝到所有用戶的安裝.
294
+ zh_TW: 已經為所有使用者安裝過該軟體
295
295
  tr_TR: Zaten makine başına bir kurulum var.
296
296
  sv_SE: Det finns redan en ”per dator”-installation.
297
297
  pl_PL: Instalacja dla urządzenia już istnieje.
@@ -312,7 +312,7 @@ perMachineInstall:
312
312
  hu_HU: Van számítógépenkénti telepítés.
313
313
  pt_BR: Existe uma instalação por máquina.
314
314
  zh_CN: 存在一个安装到所有用户的安装.
315
- zh_TW: 存在一個安裝到所有用戶的安裝.
315
+ zh_TW: 存在一個對所有使用者的安裝
316
316
  tr_TR: Makine başına bir yükleme var.
317
317
  sv_SE: Det finns en ”per dator”-installation.
318
318
  pl_PL: Instalacja dla urządzenia istnieje.
@@ -333,7 +333,7 @@ reinstallUpgrade:
333
333
  hu_HU: Újratelepít/frissít.
334
334
  pt_BR: Irá reinstalar/atualizar.
335
335
  zh_CN: 即将重新安装/升级.
336
- zh_TW: 即將重新安裝/升級.
336
+ zh_TW: 即將重新安裝/升級
337
337
  tr_TR: Yeniden yükleme/yükseltme
338
338
  sv_SE: Kommer att ominstallera/uppgradera.
339
339
  pl_PL: Nastąpi ponowna instalacja/aktualizacja.
@@ -354,7 +354,7 @@ uninstall:
354
354
  hu_HU: Eltávolít.
355
355
  pt_BR: Irá desinstalar.
356
356
  zh_CN: 即将卸载.
357
- zh_TW: 即將卸載.
357
+ zh_TW: 即將解除安裝
358
358
  tr_TR: Kaldıralacak.
359
359
  sv_SE: Kommer att avinstallera.
360
360
  pl_PL: Nastąpi dezinstalacja.
@@ -113,13 +113,21 @@
113
113
  # Try copying a few times before asking for a user action.
114
114
  Goto RetryExtract7za
115
115
  ${else}
116
- MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "$(appCannotBeClosed)" /SD IDCANCEL IDRETRY RetryExtract7za
116
+ MessageBox MB_RETRYCANCEL|MB_ICONEXCLAMATION "$(appCannotBeClosed)" /SD IDRETRY IDCANCEL AbortExtract7za
117
117
  ${endIf}
118
118
 
119
119
  # As an absolutely last resort after a few automatic attempts and user
120
120
  # intervention - we will just overwrite everything with `Nsis7z::Extract`
121
121
  # even though it is not atomic and will ignore errors.
122
+
123
+ # Clear the temporary folder first to make sure we don't use twice as
124
+ # much disk space.
125
+ RMDir /r "$PLUGINSDIR\7z-out"
126
+
122
127
  Nsis7z::Extract "${FILE}"
128
+ Goto DoneExtract7za
129
+
130
+ AbortExtract7za:
123
131
  Quit
124
132
 
125
133
  RetryExtract7za:
@@ -14,7 +14,7 @@ win7Required:
14
14
  pl: Windows 7 lub nowszy jest wymagany
15
15
  pt_BR: Requer Windows 7 ou superior
16
16
  zh_CN: 需要 Windows 7 或以上系统
17
- zh_TW: 需要 Windows 7 或以上系統
17
+ zh_TW: 需要 Windows 7 或更新的系統
18
18
  tr_TR: Windows 7 ve üstü gereklidir
19
19
  sv_SE: Windows 7 eller högre krävs
20
20
  no: Windows 7 og over er nødvendig
@@ -36,7 +36,7 @@ x64WinRequired:
36
36
  pl: Windows 64-bitowy jest wymagany
37
37
  pt_BR: Requer Windows 64 bits
38
38
  zh_CN: 需要 64 位 Windows 系统
39
- zh_TW: 需要 64 位 Windows 系統
39
+ zh_TW: 需要 64 位元 Windows 系統
40
40
  tr_TR: 64 bit Windows gerekli
41
41
  sv_SE: 64-bitars Windows krävs
42
42
  no: 64-biters Windows er nødvendig
@@ -58,7 +58,7 @@ appRunning:
58
58
  pl: "${PRODUCT_NAME} jest otwarty. Aby zamknąć kliknij na OK."
59
59
  pt_BR: "${PRODUCT_NAME} está em execução.\nClique em OK para fechar."
60
60
  zh_CN: "${PRODUCT_NAME} 正在运行.\n点击“确定”关闭."
61
- zh_TW: "${PRODUCT_NAME} 正在運行.\n點擊“確定”關閉."
61
+ zh_TW: "${PRODUCT_NAME} 正在執行。\n按一下「確定」來關閉。"
62
62
  tr_TR: "${PRODUCT_NAME} çalışıyor.\nKapatmak için Tamam'ı tıklayın."
63
63
  sv_SE: "${PRODUCT_NAME} körs. \nKlicka på OK för att stänga det."
64
64
  no: "${PRODUCT_NAME} kjører. \nKlikk OK for å lukke det."
@@ -97,7 +97,7 @@ appCannotBeClosed:
97
97
  sv: "${PRODUCT_NAME} går inte att stängas. \nVänligen stäng det manuellt och klicka på Försök igen för att fortsätta."
98
98
  tr: "${PRODUCT_NAME} kapatılamaz. \nLütfen elle kapatın ve devam etmek için Tekrar'a tıklayın"
99
99
  zh_CN: "${PRODUCT_NAME} 无法关闭。\n请手动关闭它,然后单击重试以继续。"
100
- zh_TW: "${PRODUCT_NAME} 無法關閉。\n請手動關閉它,然後單擊重試以繼續。"
100
+ zh_TW: "${PRODUCT_NAME} 無法關閉。\n請手動關閉它,然後按一下重試以繼續。"
101
101
  installing:
102
102
  en: Installing, please wait...
103
103
  de: Installation läuft, bitte warten...
@@ -134,7 +134,7 @@ areYouSureToUninstall:
134
134
  pl: Czy na pewno chcesz odinstalować ${PRODUCT_NAME}?
135
135
  pt_BR: Tem certeza que deseja desinstalar ${PRODUCT_NAME}?
136
136
  zh_CN: 确定卸载 ${PRODUCT_NAME} 吗?
137
- zh_TW: 確定卸載 ${PRODUCT_NAME} 嗎?
137
+ zh_TW: 確定解除安裝 ${PRODUCT_NAME} 嗎?
138
138
  tr_TR: ${PRODUCT_NAME} kaldırmak istediğinize Eminmisiniz?
139
139
  sv_SE: Är du säker på att du vill avinstallera ${PRODUCT_NAME}?
140
140
  no: Er du sikker på at du vil avinstallere ${PRODUCT_NAME}?