diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml
index 91788c4076b6fa60fd167e0b405bceac67ddb741..d6916a4808aabbc957cfd52902f0cfda8fb1e9b3 100644
--- a/.github/workflows/build.yaml
+++ b/.github/workflows/build.yaml
@@ -10,14 +10,14 @@ jobs:
   build:
     strategy:
       matrix:
-        os: [windows-2022, macos-11]
-        configuration: [RelWithDebInfoOS]
+        runner: [windows_2022_public]
+        configuration: [ReleaseOS]
         addrsize: [64]
         include:
-          - os: windows-2022
-            configuration: RelWithDebInfoOS
+          - runner: windows_2022_public
+            configuration: ReleaseOS
             addrsize: 32
-    runs-on: ${{ matrix.os }}
+    runs-on: ${{ matrix.runner }}
     env:
       AUTOBUILD_CONFIGURATION: ${{ matrix.configuration }}
       AUTOBUILD_ADDRSIZE: ${{ matrix.addrsize }}
@@ -45,9 +45,26 @@ jobs:
           path: .autobuild-installables
           key: ${{ matrix.os }}-${{ matrix.addrsize }}-${{ matrix.configuration }}-${{ hashFiles('autobuild.xml') }} 
 
+      - name: Install windows dependencies
+        if: runner.os == 'Windows'
+        run: choco install nsis-unicode
+
       - name: Build
+        id: build
         shell: bash
         run: |
           pip install llsd # Required by viewer tests
           autobuild configure
           autobuild build --no-configure
+
+          installer_path=$(find ./build-*/newview/ | grep '_Setup\.exe')
+          installer_name="$(basename $installer_path)"
+          echo "::set-output name=installer_path::$installer_path"
+          echo "::set-output name=installer_name::$installer_name"
+      
+      - name: Upload installer
+        if: runner.os == 'Windows'
+        uses: actions/upload-artifact@v3
+        with:
+          name: ${{ steps.build.outputs.installer_name }}
+          path: ${{ steps.build.outputs.installer_path }}
diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
index 7513908cb4f022094c802ebe716d89f49effb7f2..f7908b059c82ff24e53daa4f18b846ca814b4d02 100644
--- a/indra/newview/installers/windows/installer_template.nsi
+++ b/indra/newview/installers/windows/installer_template.nsi
@@ -26,7 +26,6 @@
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; Compiler flags
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-Unicode true
 SetOverwrite on				# Overwrite files
 SetCompress auto			# Compress if saves space
 SetCompressor /solid lzma	# Compress whole installer as one block
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 30b0d23a93c940d4c03866e082bd8536b82b0228..eec8e84a2d7d4a5fb6c27f39d0b73c3c0a30be62 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -28,7 +28,6 @@
 """
 import errno
 import glob
-import itertools
 import json
 import os
 import os.path
@@ -36,12 +35,9 @@
 import random
 import re
 import shutil
-import stat
 import subprocess
 import sys
-import tarfile
 import time
-import zipfile
 
 viewer_dir = os.path.dirname(__file__)
 # Add indra/lib/python to our path so we don't have to muck with PYTHONPATH.
@@ -789,27 +785,15 @@ def package_finish(self):
             
         # Check two paths, one for Program Files, and one for Program Files (x86).
         # Yay 64bit windows.
-        for ProgramFiles in 'ProgramFiles', 'ProgramFiles(x86)':
-            NSIS_path = os.path.expandvars(r'${%s}\NSIS\makensis.exe' % ProgramFiles)
-            if os.path.exists(NSIS_path):
-                break
-        installer_created=False
-        nsis_attempts=3
-        nsis_retry_wait=15
-        for attempt in range(nsis_attempts):
-            try:
-                self.run_command([NSIS_path, '/V2', self.dst_path_of(tempfile)])
-            except ManifestError as err:
-                if attempt+1 < nsis_attempts:
-                    print("nsis failed, waiting %d seconds before retrying" % nsis_retry_wait, file=sys.stderr)
-                    time.sleep(nsis_retry_wait)
-                    nsis_retry_wait*=2
-            else:
-                # NSIS worked! Done!
-                break
-        else:
-            print("Maximum nsis attempts exceeded; giving up", file=sys.stderr)
-            raise
+        nsis_path = "makensis.exe"
+        for program_files in '${programfiles}', '${programfiles(x86)}':
+            for nesis_path in 'NSIS', 'NSIS\\Unicode':
+                possible_path = os.path.expandvars(f"{program_files}\\{nesis_path}\\makensis.exe")
+                if os.path.exists(possible_path):
+                    nsis_path = possible_path
+                    break
+
+        self.run_command([possible_path, '/V2', self.dst_path_of(tempfile)])
 
         self.sign(installer_file)
         self.created_path(self.dst_path_of(installer_file))