System.Data.SQLite
Check-in [ffe8387567]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:Diagnostic and comment enhancements to the design-time components installer. Merge updates from trunk.
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | designOptions
Files: files | file ages | folders
SHA1: ffe83875673d1a70ce8ef373b8702aa22f4ec06d
User & Date: mistachkin 2014-08-03 02:14:39
Context
2014-08-03
02:38
Merge updates from trunk. check-in: b6b8b71b11 user: mistachkin tags: designOptions
02:14
Diagnostic and comment enhancements to the design-time components installer. Merge updates from trunk. check-in: ffe8387567 user: mistachkin tags: designOptions
01:58
Batch tool enhancements for testing. check-in: b799bc86e7 user: mistachkin tags: trunk
00:14
Merge updates from trunk. check-in: 938efc64e5 user: mistachkin tags: designOptions
Changes
Hide Diffs Side-by-Side Diffs Ignore Whitespace Patch

Changes to Setup/test.bat.

    49     49       %_AECHO% Enabling automatic build selection...
    50     50       CALL :fn_AppendVariable PREARGS " -runtimeOption autoSelect"
    51     51     )
    52     52   )
    53     53   
    54     54   %_VECHO% PreArgs = '%PREARGS%'
    55     55   
    56         -IF NOT DEFINED TESTFILE (
           56  +IF NOT DEFINED TEST_FILE (
    57     57     %_AECHO% No test file specified, using default...
    58         -  SET TESTFILE=Tests\empty.eagle
           58  +  SET TEST_FILE=Tests\empty.eagle
    59     59   )
    60     60   
    61         -%_VECHO% TestFile = '%TESTFILE%'
           61  +%_VECHO% TestFile = '%TEST_FILE%'
    62     62   
    63     63   IF NOT DEFINED POSTARGS (
    64     64     %_AECHO% No post-arguments specified, using default...
    65         -  SET POSTARGS=-file "%TESTFILE%"
           65  +  SET POSTARGS=-file "%TEST_FILE%"
    66     66   )
    67     67   
    68     68   %_VECHO% PostArgs = '%POSTARGS%'
    69     69   
    70     70   IF NOT DEFINED 32BITONLY (
    71     71     SET EAGLESHELL=EagleShell.exe
    72     72   ) ELSE (

Changes to Setup/test_all.bat.

    91     91   %_VECHO% Platform = '%PLATFORM%'
    92     92   
    93     93   IF NOT DEFINED YEARS (
    94     94     SET YEARS=2008
    95     95   )
    96     96   
    97     97   %_VECHO% Years = '%YEARS%'
           98  +%_VECHO% PreArgs = '%PREARGS%'
    98     99   
    99    100   IF NOT DEFINED TEST_FILE (
   100    101     SET TEST_FILE=Tests\all.eagle
   101    102   )
   102    103   
   103    104   %_VECHO% TestFile = '%TEST_FILE%'
          105  +%_VECHO% PostArgs = '%POSTARGS%'
   104    106   
   105    107   IF NOT DEFINED 32BITONLY (
   106    108     SET EAGLESHELL=EagleShell.exe
   107    109   ) ELSE (
   108    110     SET EAGLESHELL=EagleShell32.exe
   109    111   )
   110    112   
................................................................................
   137    139             IF ERRORLEVEL 1 (
   138    140               ECHO Failed to delete "bin\%%Y\%%C\bin\SQLite.Interop.*".
   139    141               GOTO errors
   140    142             )
   141    143           )
   142    144   
   143    145           IF NOT DEFINED NOMANAGEDONLY (
   144         -          %__ECHO% "Externals\Eagle\bin\%EAGLESHELL%" -anyInitialize "set test_year {%%Y}; set test_configuration {%%C}" -file "%TEST_FILE%"
          146  +          %__ECHO% "Externals\Eagle\bin\%EAGLESHELL%" %PREARGS% -anyInitialize "set test_year {%%Y}; set test_configuration {%%C}" -file "%TEST_FILE%" %POSTARGS%
   145    147   
   146    148             IF ERRORLEVEL 1 (
   147    149               ECHO Testing of "%%Y/%%C" managed-only assembly failed.
   148    150               GOTO errors
   149    151             )
   150    152           )
   151    153   
................................................................................
   218    220   
   219    221                 IF ERRORLEVEL 1 (
   220    222                   ECHO Failed to copy "bin\%%Y\%%C\bin\Installer.*" to "bin\%%Y\%PLATFORM%\%%C".
   221    223                   GOTO errors
   222    224                 )
   223    225               )
   224    226   
   225         -            %__ECHO% "Externals\Eagle\bin\%EAGLESHELL%" -preInitialize "set test_year {%%Y}; set test_configuration {%%C}" -initialize -runtimeOption native -file "%TEST_FILE%"
          227  +            %__ECHO% "Externals\Eagle\bin\%EAGLESHELL%" %PREARGS% -preInitialize "set test_year {%%Y}; set test_configuration {%%C}" -initialize -runtimeOption native -file "%TEST_FILE%" %POSTARGS%
   226    228   
   227    229               IF ERRORLEVEL 1 (
   228    230                 ECHO Testing of "%%Y/%%C" mixed-mode assembly failed.
   229    231                 GOTO errors
   230    232               )
   231    233             )
   232    234           ) ELSE (

Changes to System.Data.SQLite/UnsafeNativeMethods.cs.

    88     88         #region Private Data
    89     89         /// <summary>
    90     90         /// This lock is used to protect the static _SQLiteNativeModuleFileName,
    91     91         /// _SQLiteNativeModuleHandle, and processorArchitecturePlatforms fields.
    92     92         /// </summary>
    93     93         private static readonly object staticSyncRoot = new object();
    94     94   
    95         -
           95  +#if DEBUG
    96     96         /////////////////////////////////////////////////////////////////////////
    97     97         /// <summary>
    98     98         /// This dictionary stores the read counts for the runtime configuration
    99     99         /// settings.  This information is only recorded when compiled in the
   100    100         /// "Debug" build configuration.
   101    101         /// </summary>
   102         -#if DEBUG
   103    102         private static Dictionary<string, int> settingReadCounts;
   104    103   #endif
   105    104   
   106    105         /////////////////////////////////////////////////////////////////////////
   107    106         /// <summary>
   108    107         /// This dictionary stores the mappings between processor architecture
   109    108         /// names and platform names.  These mappings are now used for two

Changes to Tests/data/Installer_Test_Vs2005.log.

    58     58   Installer.exe: #58: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\8.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionProperties"
    59     59   Installer.exe: #59: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\8.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionSupport"
    60     60   Installer.exe: #60: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\8.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataObjectSupport"
    61     61   Installer.exe: #61: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\8.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataViewSupport"
    62     62   Installer.exe: #62: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\8.0", writable = False
    63     63   Installer.exe: #63: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\8.0", name = "InstallDir", defaultValue = <null>
    64     64   Installer.exe: #64: Installer.AddVsDevEnvSetup: fileName = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 8} Common7 IDE devenv.exe]]", arguments = "/setup", workingDirectory = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 8} Common7 IDE]]\", useShellExecute = False, redirectStandardOutput = True, redirectStandardError = True
    65         -Installer.exe: #65: Installer.Main: subKeysCreated = 12, subKeysDeleted = 1, keyValuesSet = 23, keyValuesDeleted = 0
           65  +Installer.exe: #65: Installer.Main: subKeysCreated = 12, subKeysDeleted = 1, keyValuesRead = 5, keyValuesWritten = 23, keyValuesDeleted = 0
    66     66   Installer.exe: #66: Installer.Main: filesCreated = 1, filesModified = 2, filesDeleted = 0
    67     67   Installer.exe: #67: Installer.Main: Success.

Changes to Tests/data/Installer_Test_Vs2008.log.

    68     68   Installer.exe: #68: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\9.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionProperties"
    69     69   Installer.exe: #69: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\9.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionSupport"
    70     70   Installer.exe: #70: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\9.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataObjectSupport"
    71     71   Installer.exe: #71: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\9.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataViewSupport"
    72     72   Installer.exe: #72: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\9.0", writable = False
    73     73   Installer.exe: #73: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\9.0", name = "InstallDir", defaultValue = <null>
    74     74   Installer.exe: #74: Installer.AddVsDevEnvSetup: fileName = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 9.0} Common7 IDE devenv.exe]]", arguments = "/setup", workingDirectory = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 9.0} Common7 IDE]]\", useShellExecute = False, redirectStandardOutput = True, redirectStandardError = True
    75         -Installer.exe: #75: Installer.Main: subKeysCreated = 13, subKeysDeleted = 2, keyValuesSet = 24, keyValuesDeleted = 0
           75  +Installer.exe: #75: Installer.Main: subKeysCreated = 13, subKeysDeleted = 2, keyValuesRead = 6, keyValuesWritten = 24, keyValuesDeleted = 0
    76     76   Installer.exe: #76: Installer.Main: filesCreated = 1, filesModified = 2, filesDeleted = 0
    77     77   Installer.exe: #77: Installer.Main: Success.

Changes to Tests/data/Installer_Test_Vs2010.log.

    61     61   Installer.exe: #61: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionProperties"
    62     62   Installer.exe: #62: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionSupport"
    63     63   Installer.exe: #63: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataObjectSupport"
    64     64   Installer.exe: #64: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataViewSupport"
    65     65   Installer.exe: #65: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\10.0", writable = False
    66     66   Installer.exe: #66: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0", name = "InstallDir", defaultValue = <null>
    67     67   Installer.exe: #67: Installer.AddVsDevEnvSetup: fileName = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 10.0} Common7 IDE devenv.exe]]", arguments = "/setup", workingDirectory = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 10.0} Common7 IDE]]\", useShellExecute = False, redirectStandardOutput = True, redirectStandardError = True
    68         -Installer.exe: #68: Installer.Main: subKeysCreated = 12, subKeysDeleted = 1, keyValuesSet = 23, keyValuesDeleted = 0
           68  +Installer.exe: #68: Installer.Main: subKeysCreated = 12, subKeysDeleted = 1, keyValuesRead = 5, keyValuesWritten = 23, keyValuesDeleted = 0
    69     69   Installer.exe: #69: Installer.Main: filesCreated = 1, filesModified = 2, filesDeleted = 0
    70     70   Installer.exe: #70: Installer.Main: Success.

Changes to Tests/data/Installer_Test_Vs2012.log.

    61     61   Installer.exe: #61: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionProperties"
    62     62   Installer.exe: #62: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionSupport"
    63     63   Installer.exe: #63: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataObjectSupport"
    64     64   Installer.exe: #64: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataViewSupport"
    65     65   Installer.exe: #65: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\11.0", writable = False
    66     66   Installer.exe: #66: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0", name = "InstallDir", defaultValue = <null>
    67     67   Installer.exe: #67: Installer.AddVsDevEnvSetup: fileName = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 11.0} Common7 IDE devenv.exe]]", arguments = "/setup", workingDirectory = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 11.0} Common7 IDE]]\", useShellExecute = False, redirectStandardOutput = True, redirectStandardError = True
    68         -Installer.exe: #68: Installer.Main: subKeysCreated = 12, subKeysDeleted = 1, keyValuesSet = 23, keyValuesDeleted = 0
           68  +Installer.exe: #68: Installer.Main: subKeysCreated = 12, subKeysDeleted = 1, keyValuesRead = 5, keyValuesWritten = 23, keyValuesDeleted = 0
    69     69   Installer.exe: #69: Installer.Main: filesCreated = 1, filesModified = 2, filesDeleted = 0
    70     70   Installer.exe: #70: Installer.Main: Success.

Changes to Tests/data/Installer_Test_Vs2013.log.

    61     61   Installer.exe: #61: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionProperties"
    62     62   Installer.exe: #62: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataConnectionSupport"
    63     63   Installer.exe: #63: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataObjectSupport"
    64     64   Installer.exe: #64: RegistryHelper.CreateSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders\{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}", subKeyName = "SupportedObjects\DataViewSupport"
    65     65   Installer.exe: #65: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\12.0", writable = False
    66     66   Installer.exe: #66: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0", name = "InstallDir", defaultValue = <null>
    67     67   Installer.exe: #67: Installer.AddVsDevEnvSetup: fileName = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 12.0} Common7 IDE devenv.exe]]", arguments = "/setup", workingDirectory = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 12.0} Common7 IDE]]\", useShellExecute = False, redirectStandardOutput = True, redirectStandardError = True
    68         -Installer.exe: #68: Installer.Main: subKeysCreated = 12, subKeysDeleted = 1, keyValuesSet = 23, keyValuesDeleted = 0
           68  +Installer.exe: #68: Installer.Main: subKeysCreated = 12, subKeysDeleted = 1, keyValuesRead = 5, keyValuesWritten = 23, keyValuesDeleted = 0
    69     69   Installer.exe: #69: Installer.Main: filesCreated = 1, filesModified = 2, filesDeleted = 0
    70     70   Installer.exe: #70: Installer.Main: Success.

Changes to Tests/data/Uninstaller_Test_Vs2005.log.

    27     27   Installer.exe: #27: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\8.0", writable = False
    28     28   Installer.exe: #28: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\8.0", subKeyName = "DataProviders", writable = True
    29     29   Installer.exe: #29: RegistryHelper.DeleteSubKeyTree: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\8.0\DataProviders", subKeyName = "{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}"
    30     30   Installer.exe: #30: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\8.0", writable = False
    31     31   Installer.exe: #31: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\8.0", name = "InstallDir", defaultValue = <null>
    32     32   Installer.exe: #32: Installer.RemoveVsDevEnvSetup: Preparing to run Visual Studio v8.0 'setup' mode to refresh its configuration.
    33     33   Installer.exe: #33: Installer.AddVsDevEnvSetup: fileName = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 8} Common7 IDE devenv.exe]]", arguments = "/setup", workingDirectory = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 8} Common7 IDE]]\", useShellExecute = False, redirectStandardOutput = True, redirectStandardError = True
    34         -Installer.exe: #34: Installer.Main: subKeysCreated = 0, subKeysDeleted = 5, keyValuesSet = 0, keyValuesDeleted = 1
           34  +Installer.exe: #34: Installer.Main: subKeysCreated = 0, subKeysDeleted = 5, keyValuesRead = 5, keyValuesWritten = 0, keyValuesDeleted = 1
    35     35   Installer.exe: #35: Installer.Main: filesCreated = 1, filesModified = 1, filesDeleted = 0
    36     36   Installer.exe: #36: Installer.Main: Success.

Changes to Tests/data/Uninstaller_Test_Vs2008.log.

    34     34   Installer.exe: #34: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\9.0", writable = False
    35     35   Installer.exe: #35: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\9.0", subKeyName = "DataProviders", writable = True
    36     36   Installer.exe: #36: RegistryHelper.DeleteSubKeyTree: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\9.0\DataProviders", subKeyName = "{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}"
    37     37   Installer.exe: #37: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\9.0", writable = False
    38     38   Installer.exe: #38: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\9.0", name = "InstallDir", defaultValue = <null>
    39     39   Installer.exe: #39: Installer.RemoveVsDevEnvSetup: Preparing to run Visual Studio v9.0 'setup' mode to refresh its configuration.
    40     40   Installer.exe: #40: Installer.AddVsDevEnvSetup: fileName = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 9.0} Common7 IDE devenv.exe]]", arguments = "/setup", workingDirectory = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 9.0} Common7 IDE]]\", useShellExecute = False, redirectStandardOutput = True, redirectStandardError = True
    41         -Installer.exe: #41: Installer.Main: subKeysCreated = 0, subKeysDeleted = 6, keyValuesSet = 0, keyValuesDeleted = 1
           41  +Installer.exe: #41: Installer.Main: subKeysCreated = 0, subKeysDeleted = 6, keyValuesRead = 6, keyValuesWritten = 0, keyValuesDeleted = 1
    42     42   Installer.exe: #42: Installer.Main: filesCreated = 1, filesModified = 1, filesDeleted = 0
    43     43   Installer.exe: #43: Installer.Main: Success.

Changes to Tests/data/Uninstaller_Test_Vs2010.log.

    30     30   Installer.exe: #30: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\10.0", writable = False
    31     31   Installer.exe: #31: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0", subKeyName = "DataProviders", writable = True
    32     32   Installer.exe: #32: RegistryHelper.DeleteSubKeyTree: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0\DataProviders", subKeyName = "{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}"
    33     33   Installer.exe: #33: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\10.0", writable = False
    34     34   Installer.exe: #34: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\10.0", name = "InstallDir", defaultValue = <null>
    35     35   Installer.exe: #35: Installer.RemoveVsDevEnvSetup: Preparing to run Visual Studio v10.0 'setup' mode to refresh its configuration.
    36     36   Installer.exe: #36: Installer.AddVsDevEnvSetup: fileName = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 10.0} Common7 IDE devenv.exe]]", arguments = "/setup", workingDirectory = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 10.0} Common7 IDE]]\", useShellExecute = False, redirectStandardOutput = True, redirectStandardError = True
    37         -Installer.exe: #37: Installer.Main: subKeysCreated = 0, subKeysDeleted = 5, keyValuesSet = 0, keyValuesDeleted = 1
           37  +Installer.exe: #37: Installer.Main: subKeysCreated = 0, subKeysDeleted = 5, keyValuesRead = 5, keyValuesWritten = 0, keyValuesDeleted = 1
    38     38   Installer.exe: #38: Installer.Main: filesCreated = 1, filesModified = 1, filesDeleted = 0
    39     39   Installer.exe: #39: Installer.Main: Success.

Changes to Tests/data/Uninstaller_Test_Vs2012.log.

    30     30   Installer.exe: #30: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\11.0", writable = False
    31     31   Installer.exe: #31: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0", subKeyName = "DataProviders", writable = True
    32     32   Installer.exe: #32: RegistryHelper.DeleteSubKeyTree: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0\DataProviders", subKeyName = "{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}"
    33     33   Installer.exe: #33: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\11.0", writable = False
    34     34   Installer.exe: #34: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\11.0", name = "InstallDir", defaultValue = <null>
    35     35   Installer.exe: #35: Installer.RemoveVsDevEnvSetup: Preparing to run Visual Studio v11.0 'setup' mode to refresh its configuration.
    36     36   Installer.exe: #36: Installer.AddVsDevEnvSetup: fileName = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 11.0} Common7 IDE devenv.exe]]", arguments = "/setup", workingDirectory = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 11.0} Common7 IDE]]\", useShellExecute = False, redirectStandardOutput = True, redirectStandardError = True
    37         -Installer.exe: #37: Installer.Main: subKeysCreated = 0, subKeysDeleted = 5, keyValuesSet = 0, keyValuesDeleted = 1
           37  +Installer.exe: #37: Installer.Main: subKeysCreated = 0, subKeysDeleted = 5, keyValuesRead = 5, keyValuesWritten = 0, keyValuesDeleted = 1
    38     38   Installer.exe: #38: Installer.Main: filesCreated = 1, filesModified = 1, filesDeleted = 0
    39     39   Installer.exe: #39: Installer.Main: Success.

Changes to Tests/data/Uninstaller_Test_Vs2013.log.

    30     30   Installer.exe: #30: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\12.0", writable = False
    31     31   Installer.exe: #31: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0", subKeyName = "DataProviders", writable = True
    32     32   Installer.exe: #32: RegistryHelper.DeleteSubKeyTree: rootKey = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0\DataProviders", subKeyName = "{0ebaab6e-ca80-4b4a-8ddf-cbe6bf058c70}"
    33     33   Installer.exe: #33: RegistryHelper.OpenSubKey: rootKey = "HKEY_LOCAL_MACHINE", subKeyName = "Software${wow64}\Microsoft\VisualStudio\12.0", writable = False
    34     34   Installer.exe: #34: RegistryHelper.GetValue: key = "HKEY_LOCAL_MACHINE\Software${wow64}\Microsoft\VisualStudio\12.0", name = "InstallDir", defaultValue = <null>
    35     35   Installer.exe: #35: Installer.RemoveVsDevEnvSetup: Preparing to run Visual Studio v12.0 'setup' mode to refresh its configuration.
    36     36   Installer.exe: #36: Installer.AddVsDevEnvSetup: fileName = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 12.0} Common7 IDE devenv.exe]]", arguments = "/setup", workingDirectory = "[file nativename [file join [expr {$is64 ? ${::env(ProgramFiles(x86))} : $::env(ProgramFiles)}] {Microsoft Visual Studio 12.0} Common7 IDE]]\", useShellExecute = False, redirectStandardOutput = True, redirectStandardError = True
    37         -Installer.exe: #37: Installer.Main: subKeysCreated = 0, subKeysDeleted = 5, keyValuesSet = 0, keyValuesDeleted = 1
           37  +Installer.exe: #37: Installer.Main: subKeysCreated = 0, subKeysDeleted = 5, keyValuesRead = 5, keyValuesWritten = 0, keyValuesDeleted = 1
    38     38   Installer.exe: #38: Installer.Main: filesCreated = 1, filesModified = 1, filesDeleted = 0
    39     39   Installer.exe: #39: Installer.Main: Success.

Changes to tools/install/Installer.cs.

   141    141   
   142    142       [Flags()]
   143    143       public enum ProviderFlags
   144    144       {
   145    145           #region Normal Values
   146    146           None = 0x0,
   147    147           SystemEf6MustBeGlobal = 0x1,
   148         -        DidLinqWarning = 0x2,
   149         -        DidEf6Warning = 0x4,
   150         -        ForceLinqEnabled = 0x8,
   151         -        ForceLinqDisabled = 0x10,
   152         -        ForceEf6Enabled = 0x20,
   153         -        ForceEf6Disabled = 0x40,
          148  +        DidLinqForceTrace = 0x2,
          149  +        DidEf6ForceTrace = 0x4,
          150  +        DidEf6ResolveTrace = 0x8,
          151  +        ForceLinqEnabled = 0x10,
          152  +        ForceLinqDisabled = 0x20,
          153  +        ForceEf6Enabled = 0x40,
          154  +        ForceEf6Disabled = 0x80,
   154    155           #endregion
   155    156   
   156    157           ///////////////////////////////////////////////////////////////////////
   157    158   
   158    159           #region Suggested Default Values
   159    160           Default = None
   160    161           #endregion
................................................................................
   867    868                   }
   868    869               }
   869    870               #endregion
   870    871   
   871    872               ///////////////////////////////////////////////////////////////////
   872    873   
   873    874               #region Public "Registry" Methods
          875  +#if false
   874    876               public object GetValue(
   875    877                   string keyName,
   876    878                   string valueName,
   877    879                   object defaultValue
   878    880                   )
   879    881               {
   880    882                   CheckDisposed();
................................................................................
   908    910               {
   909    911                   CheckDisposed();
   910    912                   CheckReadOnly();
   911    913   
   912    914                   if (!whatIf)
   913    915                       Registry.SetValue(keyName, valueName, value, valueKind);
   914    916               }
          917  +#endif
   915    918               #endregion
   916    919   
   917    920               ///////////////////////////////////////////////////////////////////
   918    921   
   919    922               #region Private Methods
   920    923               private void CheckReadOnly()
   921    924               {
................................................................................
  1518   1521               public static int SubKeysDeleted
  1519   1522               {
  1520   1523                   get { return subKeysDeleted; }
  1521   1524               }
  1522   1525   
  1523   1526               ///////////////////////////////////////////////////////////////////
  1524   1527   
  1525         -            private static int keyValuesSet;
  1526         -            public static int KeyValuesSet
         1528  +            private static int keyValuesRead;
         1529  +            public static int KeyValuesRead
  1527   1530               {
  1528         -                get { return keyValuesSet; }
         1531  +                get { return keyValuesRead; }
         1532  +            }
         1533  +
         1534  +            ///////////////////////////////////////////////////////////////////
         1535  +
         1536  +            private static int keyValuesWritten;
         1537  +            public static int KeyValuesWritten
         1538  +            {
         1539  +                get { return keyValuesWritten; }
  1529   1540               }
  1530   1541   
  1531   1542               ///////////////////////////////////////////////////////////////////
  1532   1543   
  1533   1544               private static int keyValuesDeleted;
  1534   1545               public static int KeyValuesDeleted
  1535   1546               {
................................................................................
  1714   1725                   if (verbose)
  1715   1726                       TraceOps.DebugAndTrace(TracePriority.High,
  1716   1727                           debugCallback, traceCallback, String.Format(
  1717   1728                           "key = {0}, name = {1}, defaultValue = {2}",
  1718   1729                           ForDisplay(key), ForDisplay(name),
  1719   1730                           ForDisplay(defaultValue)), traceCategory);
  1720   1731   
  1721         -                return key.GetValue(name, defaultValue);
         1732  +                object value = key.GetValue(name, defaultValue);
         1733  +
         1734  +                keyValuesRead++;
         1735  +
         1736  +                return value;
  1722   1737               }
  1723   1738   
  1724   1739               ///////////////////////////////////////////////////////////////////
  1725   1740   
  1726   1741               [MethodImpl(MethodImplOptions.NoInlining)]
  1727   1742               public static void SetValue(
  1728   1743                   MockRegistryKey key,
................................................................................
  1741   1756                           "key = {0}, name = {1}, value = {2}",
  1742   1757                           ForDisplay(key), ForDisplay(name), ForDisplay(value)),
  1743   1758                           traceCategory);
  1744   1759   
  1745   1760                   if (!whatIf)
  1746   1761                       key.SetValue(name, value);
  1747   1762   
  1748         -                keyValuesSet++;
         1763  +                keyValuesWritten++;
  1749   1764               }
  1750   1765   
  1751   1766               ///////////////////////////////////////////////////////////////////
  1752   1767   
  1753   1768               [MethodImpl(MethodImplOptions.NoInlining)]
  1754   1769               public static void DeleteValue(
  1755   1770                   MockRegistryKey key,
................................................................................
  2210   2225                   }
  2211   2226   
  2212   2227                   return null;
  2213   2228               }
  2214   2229   
  2215   2230               ///////////////////////////////////////////////////////////////////
  2216   2231   
  2217         -            private static bool IsSystemEf6AssemblyAvailable()
         2232  +            private static bool IsSystemEf6AssemblyAvailable(
         2233  +                bool trace
         2234  +                )
  2218   2235               {
  2219   2236                   if (systemEf6Assembly != null)
  2220   2237                       return true;
  2221   2238   
  2222   2239                   try
  2223   2240                   {
  2224   2241                       systemEf6Assembly = Assembly.ReflectionOnlyLoad(
  2225   2242                           SystemEf6AssemblyName);
  2226   2243   
  2227   2244                       if (systemEf6Assembly != null)
  2228   2245                       {
  2229         -                        TraceOps.DebugAndTrace(TracePriority.Highest,
  2230         -                            debugCallback, traceCallback, String.Format(
  2231         -                            "Entity Framework 6 assembly was resolved to {0}.",
  2232         -                            ForDisplay(systemEf6Assembly.Location)),
  2233         -                            traceCategory);
         2246  +                        if (trace)
         2247  +                        {
         2248  +                            TraceOps.DebugAndTrace(TracePriority.Highest,
         2249  +                                debugCallback, traceCallback, String.Format(
         2250  +                                "Entity Framework 6 assembly was " +
         2251  +                                "resolved to {0}.", ForDisplay(
         2252  +                                systemEf6Assembly.Location)),
         2253  +                                traceCategory);
         2254  +                        }
  2234   2255   
  2235   2256                           return true;
  2236   2257                       }
  2237   2258                   }
  2238   2259                   catch
  2239   2260                   {
  2240   2261                       // do nothing.
  2241   2262                   }
  2242   2263   
  2243         -                TraceOps.DebugAndTrace(TracePriority.Highest,
  2244         -                    debugCallback, traceCallback,
  2245         -                    "Entity Framework 6 assembly was not resolved.",
  2246         -                    traceCategory);
         2264  +                if (trace)
         2265  +                {
         2266  +                    TraceOps.DebugAndTrace(TracePriority.Highest,
         2267  +                        debugCallback, traceCallback,
         2268  +                        "Entity Framework 6 assembly was not resolved.",
         2269  +                        traceCategory);
         2270  +                }
  2247   2271   
  2248   2272                   return false;
  2249   2273               }
  2250   2274   
  2251   2275               ///////////////////////////////////////////////////////////////////
  2252   2276   
  2253   2277               private static bool IsSystemEf6AssemblyGlobal()
................................................................................
  3502   3526                   //
  3503   3527                   // NOTE: Check to see if the caller has forced LINQ support to
  3504   3528                   //       be enabled -OR- disabled, thereby bypassing the need
  3505   3529                   //       for "automatic detection" by this method.
  3506   3530                   //
  3507   3531                   if (HasFlags(ProviderFlags.ForceLinqEnabled, true))
  3508   3532                   {
  3509         -                    if (!HasFlags(ProviderFlags.DidLinqWarning, true))
         3533  +                    if (!HasFlags(ProviderFlags.DidLinqForceTrace, true))
  3510   3534                       {
  3511   3535                           TraceOps.DebugAndTrace(TracePriority.MediumHigh,
  3512   3536                               debugCallback, traceCallback,
  3513   3537                               "Forced to enable support for \"Linq\".",
  3514   3538                               traceCategory);
  3515   3539   
  3516         -                        providerFlags |= ProviderFlags.DidLinqWarning;
         3540  +                        providerFlags |= ProviderFlags.DidLinqForceTrace;
  3517   3541                       }
  3518   3542   
  3519   3543                       return true;
  3520   3544                   }
  3521   3545                   else if (HasFlags(ProviderFlags.ForceLinqDisabled, true))
  3522   3546                   {
  3523         -                    if (!HasFlags(ProviderFlags.DidLinqWarning, true))
         3547  +                    if (!HasFlags(ProviderFlags.DidLinqForceTrace, true))
  3524   3548                       {
  3525   3549                           TraceOps.DebugAndTrace(TracePriority.MediumHigh,
  3526   3550                               debugCallback, traceCallback,
  3527   3551                               "Forced to disable support for \"Linq\".",
  3528   3552                               traceCategory);
  3529   3553   
  3530         -                        providerFlags |= ProviderFlags.DidLinqWarning;
         3554  +                        providerFlags |= ProviderFlags.DidLinqForceTrace;
  3531   3555                       }
  3532   3556   
  3533   3557                       return false;
  3534   3558                   }
  3535   3559   
  3536   3560                   //
  3537   3561                   // NOTE: Return non-zero if the System.Data.SQLite.Linq
................................................................................
  3549   3573                   //
  3550   3574                   // NOTE: Check to see if the caller has forced EF6 support to
  3551   3575                   //       be enabled -OR- disabled, thereby bypassing the need
  3552   3576                   //       for "automatic detection" by this method.
  3553   3577                   //
  3554   3578                   if (HasFlags(ProviderFlags.ForceEf6Enabled, true))
  3555   3579                   {
  3556         -                    if (!HasFlags(ProviderFlags.DidEf6Warning, true))
         3580  +                    if (!HasFlags(ProviderFlags.DidEf6ForceTrace, true))
  3557   3581                       {
  3558   3582                           TraceOps.DebugAndTrace(TracePriority.MediumHigh,
  3559   3583                               debugCallback, traceCallback,
  3560   3584                               "Forced to enable support for \"Ef6\".",
  3561   3585                               traceCategory);
  3562   3586   
  3563         -                        providerFlags |= ProviderFlags.DidEf6Warning;
         3587  +                        providerFlags |= ProviderFlags.DidEf6ForceTrace;
  3564   3588                       }
  3565   3589   
  3566   3590                       return true;
  3567   3591                   }
  3568   3592                   else if (HasFlags(ProviderFlags.ForceEf6Disabled, true))
  3569   3593                   {
  3570         -                    if (!HasFlags(ProviderFlags.DidEf6Warning, true))
         3594  +                    if (!HasFlags(ProviderFlags.DidEf6ForceTrace, true))
  3571   3595                       {
  3572   3596                           TraceOps.DebugAndTrace(TracePriority.MediumHigh,
  3573   3597                               debugCallback, traceCallback,
  3574   3598                               "Forced to disable support for \"Ef6\".",
  3575   3599                               traceCategory);
  3576   3600   
  3577         -                        providerFlags |= ProviderFlags.DidEf6Warning;
         3601  +                        providerFlags |= ProviderFlags.DidEf6ForceTrace;
  3578   3602                       }
  3579   3603   
  3580   3604                       return false;
  3581   3605                   }
  3582   3606   
  3583   3607                   //
  3584   3608                   // NOTE: Return non-zero if the System.Data.SQLite.EF6
  3585   3609                   //       assembly should be processed during the install.
  3586         -                //       If the target is Visual Studio 2005 or Visual Studio
  3587         -                //       2008, this must return zero.
         3610  +                //       If the target is Visual Studio 2005 or Visual
         3611  +                //       Studio 2008, this must return zero.
  3588   3612                   //
  3589   3613                   if (noNetFx40 && noNetFx45 && noNetFx451)
  3590   3614                       return false;
  3591   3615   
  3592   3616                   //
  3593   3617                   // NOTE: Also, if the EF6 core assembly is unavailable, this
  3594   3618                   //       must return zero.
  3595   3619                   //
  3596         -                if (!IsSystemEf6AssemblyAvailable())
         3620  +                if (!IsSystemEf6AssemblyAvailable(!HasFlags(
         3621  +                        ProviderFlags.DidEf6ResolveTrace, true)))
         3622  +                {
         3623  +                    providerFlags |= ProviderFlags.DidEf6ResolveTrace;
  3597   3624                       return false;
         3625  +                }
  3598   3626   
  3599   3627                   //
  3600   3628                   // NOTE: Finally, if the EF6 core assembly is not available
  3601   3629                   //       globally [and this is a requirement for the current
  3602   3630                   //       install], return zero.
  3603   3631                   //
  3604   3632                   return HasFlags(ProviderFlags.SystemEf6MustBeGlobal, true) ?
................................................................................
  3869   3897                               traceCategory);
  3870   3898                       }
  3871   3899   
  3872   3900                       ///////////////////////////////////////////////////////////
  3873   3901   
  3874   3902                       traceCallback(String.Format(NameAndValueFormat,
  3875   3903                           "IsSystemEf6AssemblyAvailable", ForDisplay(
  3876         -                        IsSystemEf6AssemblyAvailable())),
         3904  +                        IsSystemEf6AssemblyAvailable(false))),
  3877   3905                           traceCategory);
  3878   3906   
  3879   3907                       traceCallback(String.Format(NameAndValueFormat,
  3880   3908                           "IsSystemEf6AssemblyGlobal", ForDisplay(
  3881   3909                           IsSystemEf6AssemblyGlobal())),
  3882   3910                           traceCategory);
  3883   3911   
................................................................................
  4467   4495   
  4468   4496           ///////////////////////////////////////////////////////////////////////
  4469   4497   
  4470   4498           //
  4471   4499           // NOTE: The trace category is the same for both the debug and trace
  4472   4500           //       callbacks.
  4473   4501           //
  4474         -        private static string traceCategory = Path.GetFileName(
  4475         -            (thisAssembly != null) ? thisAssembly.Location : null);
         4502  +        private static string traceCategory = (thisAssembly != null) ?
         4503  +            Path.GetFileName(thisAssembly.Location) : null;
  4476   4504   
  4477   4505           ///////////////////////////////////////////////////////////////////////
  4478   4506   
  4479   4507           //
  4480   4508           // NOTE: Set the debug and trace logging callbacks used by the
  4481   4509           //       application.
  4482   4510           //
................................................................................
  6939   6967               }
  6940   6968           }
  6941   6969           #endregion
  6942   6970           #endregion
  6943   6971   
  6944   6972           ///////////////////////////////////////////////////////////////////////
  6945   6973   
  6946         -        #region Application Entry Point
         6974  +        #region Installer Entry Point
  6947   6975           [MethodImpl(MethodImplOptions.NoInlining)]
  6948   6976           private static int Main(
  6949   6977               string[] args
  6950   6978               )
  6951   6979           {
  6952   6980               #region Debugger Hook
  6953   6981               if (Environment.GetEnvironmentVariable("Break") != null)
................................................................................
  6982   7010   
  6983   7011                       return 1; /* FAILURE */
  6984   7012                   }
  6985   7013                   #endregion
  6986   7014   
  6987   7015                   ///////////////////////////////////////////////////////////////
  6988   7016   
         7017  +                //
         7018  +                // NOTE: Setup the "mock" registry per the "what-if" mode.
         7019  +                //       Since all registry access performed by this installer
         7020  +                //       uses this "mock" registry, it is impossible for any
         7021  +                //       actual system changes to occur unless "what-if" mode
         7022  +                //       is disabled.  Furthermore, protections are in place
         7023  +                //       to prevent direct access to the wrapped registry keys
         7024  +                //       when "safe" mode is enabled.
         7025  +                //
  6989   7026                   using (MockRegistry registry = new MockRegistry(
  6990   7027                           configuration.WhatIf, false, false))
  6991   7028                   {
  6992         -                    #region Core Assembly Name Check
         7029  +                    #region Assembly Name Checks
  6993   7030                       //
  6994   7031                       // NOTE: Query all the assembly names first, before making
  6995   7032                       //       any changes to the system, because this will throw
  6996   7033                       //       an exception if any of the file names do not point
  6997   7034                       //       to a valid managed assembly.  The values of these
  6998   7035                       //       local variables are never used after this point;
  6999   7036                       //       however, do not remove them.
................................................................................
  7377   7414   
  7378   7415                       ///////////////////////////////////////////////////////////
  7379   7416   
  7380   7417                       #region Log Summary
  7381   7418                       TraceOps.DebugAndTrace(TracePriority.MediumHigh,
  7382   7419                           debugCallback, traceCallback, String.Format(
  7383   7420                           "subKeysCreated = {0}, subKeysDeleted = {1}, " +
  7384         -                        "keyValuesSet = {2}, keyValuesDeleted = {3}",
         7421  +                        "keyValuesRead = {2}, keyValuesWritten = {3}, " +
         7422  +                        "keyValuesDeleted = {4}",
  7385   7423                           ForDisplay(RegistryHelper.SubKeysCreated),
  7386   7424                           ForDisplay(RegistryHelper.SubKeysDeleted),
  7387         -                        ForDisplay(RegistryHelper.KeyValuesSet),
         7425  +                        ForDisplay(RegistryHelper.KeyValuesRead),
         7426  +                        ForDisplay(RegistryHelper.KeyValuesWritten),
  7388   7427                           ForDisplay(RegistryHelper.KeyValuesDeleted)),
  7389   7428                           traceCategory);
  7390   7429   
  7391   7430                       TraceOps.DebugAndTrace(TracePriority.MediumHigh,
  7392   7431                           debugCallback, traceCallback, String.Format(
  7393   7432                           "filesCreated = {0}, filesModified = {1}, " +
  7394   7433                           "filesDeleted = {2}", ForDisplay(filesCreated),