winrtinstaller: Add logging support to Windows Runtime Installer
authorDavid Pinedo <david@lunarg.com>
Tue, 29 Mar 2016 19:46:12 +0000 (13:46 -0600)
committerDavid Pinedo <david@lunarg.com>
Tue, 29 Mar 2016 19:47:46 +0000 (13:47 -0600)
windowsRuntimeInstaller/ConfigLayersAndVulkanDLL.ps1
windowsRuntimeInstaller/InstallerRT.nsi
windowsRuntimeInstaller/README.txt

index 9a6665d..dcbf257 100644 (file)
@@ -46,6 +46,13 @@ Param(
  [int]$ossize\r
 )\r
 \r
+# Start logging\r
+$log=$Env:Temp+"\VulkanRT"\r
+New-Item -ItemType Directory -Force -Path $log | Out-Null\r
+$log=$log+"\ConfigLayersAndVulkanDLL.log"\r
+echo "ConfigLayersAndVulkanDLL.ps1 $majorabi $ossize" >$log\r
+(Get-Date).ToString() >>$log\r
+\r
 $vulkandll = "vulkan-"+$majorabi+".dll"\r
 $windrive  = $env:SYSTEMDRIVE\r
 $winfolder = $env:SYSTEMROOT\r
@@ -93,6 +100,8 @@ function notNumeric ($x) {
 \r
 function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)\r
 {\r
+   echo "UpdateVulkanSysFolder $dir $writeSdkName" >>$log\r
+\r
    # Push the current path on the stack and go to $dir\r
    Push-Location -Path $dir\r
 \r
@@ -100,9 +109,10 @@ function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)
    # First Initialize the list to empty\r
    $script:VulkanDllList = @()\r
 \r
-   # Find all DLL objects in this directory\r
+   # Find all vulkan dll files in this directory\r
    dir -name vulkan-$majorabi-*.dll |\r
    ForEach-Object {\r
+       echo "File $_" >>$log\r
        if ($_ -match "=" -or\r
            $_ -match "@" -or\r
            $_ -match " " -or\r
@@ -112,8 +122,18 @@ function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)
            # If a file name contains "=", "@", or " ", or it contains less then 5 dashes or more than\r
            # 7 dashes, it wasn't installed by the Vulkan Run Time.\r
            # Note that we need to use return inside of ForEach-Object is to continue with iteration.\r
+           echo "Rejected $_ - bad format" >>$log\r
+           return\r
+       }\r
+\r
+       # If the corresponding vulkaninfo is not present, it wasn't installed by the Vulkan Run Time\r
+       $vulkaninfo=$_ -replace ".dll",".exe"\r
+       $vulkaninfo=$vulkaninfo -replace "vulkan","vulkaninfo"\r
+       if (-not (Test-Path $vulkaninfo)) {\r
+           echo "Rejected $_ - vulkaninfo not present" >>$log\r
            return\r
        }\r
+\r
        $major=$_.Split('-')[2]\r
        $majorOrig=$major\r
        $minor=$_.Split('-')[3]\r
@@ -155,14 +175,30 @@ function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)
               $prebuildno="z"*10\r
           }\r
        }\r
+       echo "Version $majorOrig $minorOrig $patchOrig $buildnoOrig $prereleaseOrig $prebuildnoOrig" >>$log\r
 \r
        # Make sure fields that are supposed to be numbers are numbers\r
-       if (notNumeric($major)) {return}\r
-       if (notNumeric($minor)) {return}\r
-       if (notNumeric($patch)) {return}\r
-       if (notNumeric($buildno)) {return}\r
+       if (notNumeric($major)) {\r
+           echo "Rejected $_ - bad major" >>$log\r
+           return\r
+       }\r
+       if (notNumeric($minor)) {\r
+           echo "Rejected $_ - bad minor" >>$log\r
+           return\r
+       }\r
+       if (notNumeric($patch)) {\r
+           echo "Rejected $_ - bad patch" >>$log\r
+           return\r
+       }\r
+       if (notNumeric($buildno)) {\r
+           echo "Rejected $_ - bad buildno" >>$log\r
+           return\r
+       }\r
        if (notNumeric($prebuildno)) {\r
-           if ($prebuildno -ne "z"*10) {return}\r
+           if ($prebuildno -ne "z"*10) {\r
+               echo "Rejected $_ - bad prebuildno" >>$log\r
+               return\r
+           }\r
        }\r
 \r
        $major = $major.padleft(10,'0')\r
@@ -173,6 +209,7 @@ function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)
        $prebuildno = $prebuildno.padleft(10,'0')\r
 \r
        # Add a new element to the $VulkanDllList array\r
+       echo "Adding $_ to Vulkan dll list " >>$log\r
        $script:VulkanDllList+="$major=$minor=$patch=$buildno=$prerelease=$prebuildno= $_ @$majorOrig@$minorOrig@$patchOrig@$buildnoOrig@$prereleaseOrig@$prebuildnoOrig@"\r
    }\r
 \r
@@ -188,12 +225,14 @@ function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)
         # The most recent vulkanDLL is the second word in the last element of the\r
         # sorted $VulkanDllList. Copy it to $vulkandll.\r
         $mrVulkanDll=$script:VulkanDllList[-1].Split(' ')[1]\r
+        echo "copy $mrVulkanDll $vulkandll" >>$log\r
         copy $mrVulkanDll $vulkandll\r
 \r
         # Copy the most recent version of vulkaninfo-<abimajor>-*.exe to vulkaninfo.exe.\r
         # We create the source file name for the copy from $mrVulkanDll.\r
         $mrVulkaninfo=$mrVulkanDll -replace ".dll",".exe"\r
         $mrVulkaninfo=$mrVulkaninfo -replace "vulkan","vulkaninfo"\r
+        echo "copy $mrVulkaninfo vulkaninfo.exe" >>$log\r
         copy $mrVulkaninfo vulkaninfo.exe\r
 \r
         # Create the name used in the registry for the SDK associated with $mrVulkanDll.\r
@@ -211,6 +250,7 @@ function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)
         if ($prebuildno -ne "") {\r
             $sdktempname=$sdktempname + "." + $prebuildno\r
         }\r
+        echo "sdkname = $sdktempname" >>$log\r
     }\r
 \r
     # Return to our previous folder\r
@@ -227,14 +267,17 @@ function UpdateVulkanSysFolder([string]$dir, [int]$writeSdkName)
 # We only care about SYSWOW64 if we're targeting a 64-bit OS\r
 if ($ossize -eq 64) {\r
     # Update the SYSWOW64 Vulkan DLLS/EXEs\r
+    echo "Calling UpdateVulkanSysFolder $winfolder\SYSWOW64 0" >>$log\r
     UpdateVulkanSysFolder $winfolder\SYSWOW64 0\r
 }\r
 \r
 # Update the SYSTEM32 Vulkan DLLS/EXEs\r
+echo "Calling UpdateVulkanSysFolder $winfolder\SYSTEM32 1" >>$log\r
 UpdateVulkanSysFolder $winfolder\SYSTEM32 1\r
 \r
 # Create an array of vulkan sdk install dirs\r
 \r
+echo "Creating array of of Vulkan SDK Install dirs" >>$log\r
 $mrVulkanDllInstallDir=""\r
 $VulkanSdkDirs=@()\r
 Get-ChildItem -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall |\r
@@ -245,9 +288,11 @@ Get-ChildItem -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr
            $tmp=Get-ItemProperty -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$regkey -Name UninstallString\r
            $tmp=$tmp -replace "\\Uninstall.exe.*",""\r
            $tmp=$tmp -replace ".*=.",""\r
+           echo "Adding $tmp to VulkanSDKDirs" >>$log\r
            $VulkanSdkDirs+=$tmp\r
            if ($regkey -eq $script:sdkname) {\r
                # Save away the sdk install dir for the the most recent vulkandll\r
+               echo "Setting mrVulkanDllInstallDir to $tmp" >>$log\r
                $mrVulkanDllInstallDir=$tmp\r
            }\r
        }\r
@@ -257,7 +302,9 @@ Get-ChildItem -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Curr
 # Search list of sdk install dirs for an sdk compatible with $script:sdkname.\r
 # We go backwards through VulkanDllList to generate SDK names, because we want the most recent SDK.\r
 if ($mrVulkanDllInstallDir -eq "") {\r
+    echo "Searching VulkanDllList" >>$log\r
     ForEach ($idx in ($script:VulkanDllList.Length-1)..0) {\r
+        $tmp=$script:VulkanDllList[$idx]\r
         $vulkanDllMajor=$script:VulkanDllList[$idx].Split('@')[1]\r
         $vulkanDllMinor=$script:VulkanDllList[$idx].Split('@')[2]\r
         $vulkanDllPatch=$script:VulkanDllList[$idx].Split('@')[3]\r
@@ -271,6 +318,7 @@ if ($mrVulkanDllInstallDir -eq "") {
         if ($vulkanDllPrebuildno) {\r
             $regEntry=$regEntry+"."+$vulkanDllPrebuildno\r
         }\r
+        echo "Comparing $regEntry" >>$log\r
         $rval=Get-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\$regEntry -ErrorAction SilentlyContinue\r
         $instDir=$rval\r
         $instDir=$instDir -replace "\\Uninstall.exe.*",""\r
@@ -282,6 +330,7 @@ if ($mrVulkanDllInstallDir -eq "") {
             $reMinor=$rval.Split('.')[1]\r
             $rePatch=$rval.Split('.')[2]\r
             if ($reMajor+$reMinor+$rePatch -eq $vulkanDllMajor+$vulkanDllMinor+$vulkanDllPatch) {\r
+                echo "Setting mrVulkanDllInstallDir to $instDir" >>$log\r
                 $mrVulkanDllInstallDir=$instDir\r
                 break\r
             }\r
@@ -304,12 +353,14 @@ $VulkanSdkDirs+="$windrive\VulkanSDK\0.9.3"
 # Note that we remove only those entries created by Vulkan SDKs. If other\r
 # layers were installed that are not from an SDK, we don't mess with them.\r
 \r
+echo "Removing old layer registry entries from HKLM\SOFTWARE\Khronos\Vulkan\ExplicitLayers" >>$log\r
 Get-Item -Path Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\ExplicitLayers | Select-Object -ExpandProperty Property |\r
    ForEach-Object {\r
        $regval=$_\r
        ForEach ($sdkdir in $VulkanSdkDirs) {\r
           if ($regval -like "$sdkdir\*.json") {\r
               Remove-ItemProperty -ErrorAction SilentlyContinue -Path HKLM:\SOFTWARE\Khronos\Vulkan\ExplicitLayers -name $regval\r
+              echo "Removed registry entry $regval" >>$log\r
           }\r
        }\r
    }\r
@@ -321,6 +372,7 @@ if ($ossize -eq 64) {
           ForEach ($sdkdir in $VulkanSdkDirs) {\r
              if ($regval -like "$sdkdir\*.json") {\r
                  Remove-ItemProperty -ErrorAction SilentlyContinue -Path HKLM:\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers -name $regval\r
+                 echo "Removed WOW6432Node registry entry $regval" >>$log\r
              }\r
           }\r
       }\r
@@ -329,6 +381,7 @@ if ($ossize -eq 64) {
 \r
 # Create layer registry entries associated with Vulkan SDK from which $mrVulkanDll is from\r
 \r
+echo "Creating new layer registry entries in HKLM\SOFTWARE\Khronos\Vulkan\ExplicitLayers" >>$log\r
 if ($mrVulkanDllInstallDir -ne "") {\r
     if ($ossize -eq 64) {\r
     \r
@@ -337,6 +390,7 @@ if ($mrVulkanDllInstallDir -ne "") {
         Get-ChildItem $mrVulkanDllInstallDir\Bin -Filter VkLayer*json |\r
            ForEach-Object {\r
                New-ItemProperty -Path HKLM:\SOFTWARE\Khronos\Vulkan\ExplicitLayers -Name $mrVulkanDllInstallDir\Bin\$_ -PropertyType DWord -Value 0 | out-null\r
+              echo "Created registry entry for $mrVulkanDllInstallDir\Bin\$_" >>$log\r
            }\r
 \r
         # Create registry entires for the WOW6432Node registry location for 32-bit items on a 64-bit OS\r
@@ -344,6 +398,7 @@ if ($mrVulkanDllInstallDir -ne "") {
         Get-ChildItem $mrVulkanDllInstallDir\Bin32 -Filter VkLayer*json |\r
            ForEach-Object {\r
                New-ItemProperty -Path HKLM:\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers -Name $mrVulkanDllInstallDir\Bin32\$_ -PropertyType DWord -Value 0 | out-null\r
+              echo "Created WOW6432Node registry entry for $mrVulkanDllInstallDir\Bin32\$_" >>$log\r
            }\r
            \r
     } else {\r
@@ -353,16 +408,22 @@ if ($mrVulkanDllInstallDir -ne "") {
         Get-ChildItem $mrVulkanDllInstallDir\Bin32 -Filter VkLayer*json |\r
            ForEach-Object {\r
                New-ItemProperty -Path HKLM:\SOFTWARE\Khronos\Vulkan\ExplicitLayers -Name $mrVulkanDllInstallDir\Bin32\$_ -PropertyType DWord -Value 0 | out-null\r
+               echo "Created registry entry for $mrVulkanDllInstallDir\Bin\$_" >>$log\r
            }\r
     \r
     }\r
 }\r
 \r
+echo "ConfigLayersAndVulkanDLL.ps1 completed" >>$log\r
+(Get-Date).ToString() >>$log\r
+\r
+\r
+\r
 # SIG # Begin signature block\r
 # MIIcZgYJKoZIhvcNAQcCoIIcVzCCHFMCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB\r
 # gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR\r
-# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUdeZMvyfevbCm2d9Sn02g0L39\r
-# 6EKggheVMIIFHjCCBAagAwIBAgIQDmYEpPtQ2iBY4vC2AGq6uzANBgkqhkiG9w0B\r
+# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUXAaVuJRboqiwfHon/TJIXS0m\r
+# ohqggheVMIIFHjCCBAagAwIBAgIQDmYEpPtQ2iBY4vC2AGq6uzANBgkqhkiG9w0B\r
 # AQsFADByMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYD\r
 # VQQLExB3d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFz\r
 # c3VyZWQgSUQgQ29kZSBTaWduaW5nIENBMB4XDTE1MDQzMDAwMDAwMFoXDTE2MDcw\r
@@ -493,22 +554,22 @@ if ($mrVulkanDllInstallDir -ne "") {
 # QTIgQXNzdXJlZCBJRCBDb2RlIFNpZ25pbmcgQ0ECEA5mBKT7UNogWOLwtgBqursw\r
 # CQYFKw4DAhoFAKB4MBgGCisGAQQBgjcCAQwxCjAIoAKAAKECgAAwGQYJKoZIhvcN\r
 # AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUw\r
-# IwYJKoZIhvcNAQkEMRYEFCQBfl/Xm3/R6yW/EO6kbSmkdowDMA0GCSqGSIb3DQEB\r
-# AQUABIIBADCbC3HqswOLfqwjX9+TM0hW9sG02WMHPbz0fFBTH5J/tck4wZECl9ct\r
-# DK0pUzHoJBY9EuBnH9OD46MiVCIYwYHQ9w/xiaypUNRbfXYEwSVL9EXCIcYkkqAN\r
-# pSpDrQJu0TzmGyvN1fSvYj/qahvIVKz/cxbzzQbYl4NqNXRfiD26Pa5JOdNABP8g\r
-# WL5Ruk/MPvMJE0dIW3em40hoanGKQhP0xgQ/BGJygumYrZsigENfhQkRVngH/aUP\r
-# f5k78VKL3DFoCMmneIxAfIwspTC37izb/AjlqDNUbqEmfBBIsbLgu6teZVIyPBI/\r
-# nktk5kwOOhzuyeQxLAcn0z+8ToF5frKhggIPMIICCwYJKoZIhvcNAQkGMYIB/DCC\r
+# IwYJKoZIhvcNAQkEMRYEFLzB0lbx2Z662b5ESDWLj98ew1UOMA0GCSqGSIb3DQEB\r
+# AQUABIIBADsR0P8QxSNCPshQFDxK9Ezsrk25HyGM9a0SZOaGrL8ZSSZ6PY8Wz/bQ\r
+# i2we//wLD31wkdzj/VKBdFHTvheQiA3b094RcC+Ii3VsH4esb6gSBVEnfX0Iu5ZJ\r
+# o9k1L5CNS9nhJ+ydgKFmDS6R3MUCZi613yZpCe9ZFqsgf9UP/gQiZSC29es7WnaX\r
+# OtPrz5OAO/JTNFDnTO9d+rg/iYeN4ybDtuSp0j6fKQ/DPesmE/MZpcfD+kiRtY9u\r
+# x7o8IVv/lq0+5sRTaBogeauXVhEaA37jZdo0IbwESl8YvaHj2zstRBcT8AxMuGBW\r
+# H/FjShnOONEAPrFyFoPi8CFrXbrqJkahggIPMIICCwYJKoZIhvcNAQkGMYIB/DCC\r
 # AfgCAQEwdjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkw\r
 # FwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBBc3N1\r
 # cmVkIElEIENBLTECEAMBmgI6/1ixa9bV6uYX8GYwCQYFKw4DAhoFAKBdMBgGCSqG\r
-# SIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE2MDMyMjIwMjM0\r
-# N1owIwYJKoZIhvcNAQkEMRYEFM6NeSjPd00j7j25copMrjENL7GXMA0GCSqGSIb3\r
-# DQEBAQUABIIBAHJbUlt2mxIX5hbiigRw3kIoug57G5sDYWQK8rcTjHUif6PAdEqj\r
-# 5c1UhxQHJxEasddUAqbEtCsG8qiz1lq76KKiwaWxffSRQ2JwjYEvnYQ2TK9rtnMs\r
-# zeYnQajrIUP44z7ysqoikB0bEgup0QVDScm4SSa1SmqQzHMsUX5rCygsM3PlpF5K\r
-# dH2u3eSK4zDhGiye6/SQkcddvsI2lLFRcxQIyfUD4+W9oFdXuYkKhNBGPLUlOH9V\r
-# DEDQG9zH6CAzvla/r1iYnX8RZ4rz7yacdrMBq5g92HAEcuXFTBQfaeAZSGQBhNSn\r
-# p1rVWgLb0T3a/5zlOtZvp+bLyDRbms+w8BY=\r
+# SIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE2MDMyOTE5NDM0\r
+# NlowIwYJKoZIhvcNAQkEMRYEFBarBhBOgDzXlhQxxNXSfB14mBngMA0GCSqGSIb3\r
+# DQEBAQUABIIBACWObtn5lJ8laqfd55xT4EfWbvmPGV04c/CkDF6ziecEQxhCxUYi\r
+# rw8kV8nEhYa79qE5p3EXe+aZflRo70t21sr3s8GNHUW98pc0goIaC5rKzOVT3X0x\r
+# VH870qjVWdGMRRTUXlryBAQRv3LL93GyMIL1g1Y4uYKEU9PyrC8L26bsrGQggQEy\r
+# KxL0hopMSUNNE8glc1nbe/FGDylkHyi33qwNaz0buVLr7xCZQTpIecXat1mfvzPn\r
+# gsSr3+u9086Asz0QEbVmskhzFLSdd6QKpWjwYXWoyeFqrKlPdL4InHhRKFsEA8fQ\r
+# xV5A7ORVrXHOpPd+ZUrIhaggYDBqFiGWfmA=\r
 # SIG # End signature block\r
index a0291a7..791b9b5 100644 (file)
@@ -237,6 +237,13 @@ VIAddVersionKey  "LegalCopyright" ""
 # Start default section
 Section
 
+    # Turn on logging
+    LogSet on
+
+    # Remove contents of temp dir
+    SetOutPath "$TEMP\VulkanRT"
+    RmDir /R "$TEMP\VulkanRT"
+
     # If running on a 64-bit OS machine, disable registry re-direct since we're running as a 32-bit executable.
     ${If} ${RunningX64}
 
@@ -498,12 +505,23 @@ Section
     StrCpy $1 65
     Call CheckForError
 
+    # Finish logging and move log file to TEMP dir
+    LogSet off
+    Rename "$INSTDIR\install.log" "$TEMP\VulkanRT\Install.log"
+
 SectionEnd
 
 # Uninstaller section start
 !ifdef UNINSTALLER
 Section "uninstall"
 
+    # Turn on logging
+    LogSet on
+
+    # Remove contents of temp dir
+    SetOutPath "$TEMP\VulkanRT"
+    RmDir /R "$TEMP\VulkanRT"
+
     # If running on a 64-bit OS machine, disable registry re-direct since we're running as a 32-bit executable.
     ${If} ${RunningX64}
 
@@ -669,9 +687,9 @@ Section "uninstall"
     StrCpy $1 80
     Call un.CheckForError
 
-    # Remove temp dir
-    SetOutPath "$TEMP"
-    RmDir /R "$TEMP\VulkanRT"
+    # Finish logging and move log file to TEMP dir
+    LogSet off
+    Rename "$INSTDIR\install.log" "$TEMP\VulkanRT\Uninstall.log"
 
 SectionEnd
 !endif
@@ -713,6 +731,10 @@ Function CheckForError
         # IHV's using this install may want no message box.
         MessageBox MB_OK|MB_ICONSTOP "${errorMessage1}${errorMessage2}Errorcode: $1$\r$\n" /SD IDOK
 
+        # Finish logging and move log file to TEMP dir
+        LogSet off
+        Rename "$INSTDIR\install.log" "$TEMP\VulkanRT\install.log"
+
         # Copy the uninstaller to a temp folder of our own creation so we can completely
         # delete the old contents.
         SetOutPath "$TEMP\VulkanRT"
@@ -742,6 +764,11 @@ Function un.CheckForError
         # Set an error message to output
         SetErrorLevel $1
 
+        # Finish logging and move log file to TEMP dir
+        LogSet off
+        Delete "$TEMP\VulkanRT\Uninstall.log"
+        Rename "$INSTDIR\install.log" "$TEMP\VulkanRT\Uninstall.log"
+
         Quit
     ${EndIf}
 FunctionEnd
index 73f8254..d1833a8 100644 (file)
@@ -3,8 +3,15 @@ Runtime Installer Package.
 \r
 To build the Vulkan Runtime Installer:\r
 \r
-    1. Install Nullsoft Install System version 3.0b1 or greater. (Available\r
-       from http://nsis.sourceforge.net/Download.)\r
+    1. Install Nullsoft Install System (NSIS) version 3.0b1 or greater. The\r
+       version of NSIS needed for building the Vulkan Runtime Installer\r
+       must support logging (i.e. must have been built with NSIS_CONFIG_LOG=yes\r
+       set), and must support long strings (i.e. NSIS_MAX_STRLEN=8192 must be\r
+       set).  Note that the NSIS binary version available at\r
+       http://nsis.sourceforge.net/Download does not have these enabled. You\r
+       may have to build NSIS yourself with these flags set - see\r
+       http://nsis//sourceforge.net/Docs/AppendixG.html for information on\r
+       building NSIS.\r
 \r
     2. Install the NSIS AccessControl plug-in. (Available from\r
        http://nsis.sourceforge.net/AccessControl_plug-in.)\r
@@ -109,3 +116,10 @@ Some notes on the behavior of the Windows Vulkan Runtime Installer:
      This ProductVersion should always be identical to <version> in:\r
 \r
        HKLM\Software\Microsoft\Windows\CurrentVersion\Uininstall\VulkanRT<version>\UinstalString\r
+\r
+   o The Installer and Uninstaller create log files, which can be\r
+     found in the VulkanrRT folder in the current TEMP folder.\r
+     (The TEMP folder is generally identified by the TEMP environment\r
+     variable). In addition to installer/uninstaller logs files,\r
+     the folder also contains a log from the last run of the\r
+     ConfigLayersAndVulkanDLL.ps1 script.\r