diff --git a/nsis/installer.nsh b/nsis/installer.nsh new file mode 100644 index 0000000..36f5e68 --- /dev/null +++ b/nsis/installer.nsh @@ -0,0 +1,60 @@ +; Theseus Navigator NSIS include — bundles Ariadne's Thread as an opt-out. +; +; During install (Theseus 0.1.0+): if Ariadne's Thread is NOT already installed, +; prompt with a Yes/No (default Yes) offering to also install the system-wide +; resolver. On Yes, chain-invoke the bundled AriadneResolver-Setup silently +; (its own UAC prompt fires because Inno Setup declares PrivilegesRequired=admin). +; +; During uninstall: if Ariadne's Thread IS installed, prompt with a Yes/No +; (default Yes) offering to also uninstall it. On Yes, run its uninstaller +; silently via the UninstallString we read from its Inno registry entry. +; +; Registry lookup: Inno Setup 6 registers per-machine 64-bit installs (which +; Ariadne is — ArchitecturesInstallIn64BitMode=x64compatible) under the +; 64-bit view of HKLM\Software\Microsoft\Windows\CurrentVersion\Uninstall\ +; with the AppId + "_is1" suffix. Ariadne's AppId is fixed at +; {7E7A5F1C-3B4E-4C8A-9E1D-ARIADNERSLVR}. +; +; Silent flags used on the Ariadne installer: +; /VERYSILENT no wizard UI (progress bar only via ExecWait blocking) +; /SUPPRESSMSGBOXES suppresses all message boxes the Inno script might raise +; /NORESTART never auto-reboot +; +; If the user cancels the Ariadne UAC prompt, ExecWait still returns cleanly +; and Theseus install continues — Ariadne install is best-effort. The user +; can always install it later from silentmode.st/tools. + +!define ARIADNE_INSTALLER "AriadneResolver-Setup-0.1.0.exe" +!define ARIADNE_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\{7E7A5F1C-3B4E-4C8A-9E1D-ARIADNERSLVR}_is1" + +!macro customInstall + ; Skip the prompt if Ariadne is already installed — no point asking on upgrades. + SetRegView 64 + ReadRegStr $R0 HKLM "${ARIADNE_UNINST_KEY}" "UninstallString" + SetRegView lastused + StrCmp $R0 "" ariadne_ask ariadne_skip_install + + ariadne_ask: + MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON1 \ + "Install Ariadne's Thread now?$\r$\n$\r$\nAriadne's Thread is a small system-wide resolver that lets Bitcoin Cash names (.bch, .x, ...) work in Chrome, Edge, Firefox, and every other browser on this machine.$\r$\n$\r$\nRecommended. It runs a UAC prompt of its own." \ + IDNO ariadne_skip_install + ; extraResources are unpacked under $INSTDIR/resources. + ExecWait '"$INSTDIR\resources\${ARIADNE_INSTALLER}" /VERYSILENT /SUPPRESSMSGBOXES /NORESTART' + + ariadne_skip_install: +!macroend + +!macro customUnInstall + ; Only offer to remove Ariadne if it's actually installed. + SetRegView 64 + ReadRegStr $R0 HKLM "${ARIADNE_UNINST_KEY}" "UninstallString" + SetRegView lastused + StrCmp $R0 "" ariadne_skip_uninstall + + MessageBox MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON1 \ + "Also uninstall Ariadne's Thread?$\r$\n$\r$\nRemoving it makes Bitcoin Cash names stop resolving in Chrome, Edge, Firefox, and every other browser on this machine. (Theseus's own uninstall does not depend on this — say No to keep the system-wide resolver.)" \ + IDNO ariadne_skip_uninstall + ExecWait '$R0 /VERYSILENT /SUPPRESSMSGBOXES /NORESTART' + + ariadne_skip_uninstall: +!macroend diff --git a/package.json b/package.json index e5048f3..515884a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "theseus-navigator", - "version": "0.0.9", + "version": "0.1.0", "description": "Theseus Navigator — a browser that follows the thread. By Silent Mode, a Deviant project.", "author": "Silent Mode", "main": "main.js", @@ -85,6 +85,10 @@ { "from": "snapshots/bns-name-snapshot.json", "to": "bns-name-snapshot.json" + }, + { + "from": "build/AriadneResolver-Setup-0.1.0.exe", + "to": "AriadneResolver-Setup-0.1.0.exe" } ], "win": { @@ -97,7 +101,8 @@ "oneClick": false, "perMachine": false, "allowToChangeInstallationDirectory": true, - "artifactName": "TheseusNavigator-Setup-${version}.${ext}" + "artifactName": "TheseusNavigator-Setup-${version}.${ext}", + "include": "nsis/installer.nsh" }, "portable": { "artifactName": "TheseusNavigator-${version}-portable.${ext}"