Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Correct the system directory used by the design-time installer when running in WoW64. Also, set the Assembly, AssociatedSource, DefaultProvider values for the VS package. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
65ffbd08e56e9f02dd83c64eecd4f0b1 |
User & Date: | mistachkin 2012-09-16 01:47:35.901 |
Context
2012-09-16
| ||
01:58 | Use the designer package assembly name for the 'Assembly' value, not the core assembly name. check-in: b692876da9 user: mistachkin tags: trunk | |
01:47 | Correct the system directory used by the design-time installer when running in WoW64. Also, set the Assembly, AssociatedSource, DefaultProvider values for the VS package. check-in: 65ffbd08e5 user: mistachkin tags: trunk | |
2012-09-15
| ||
23:19 | The .NET Framework 4.5 has no client profile. check-in: 9f43f6f4bf user: mistachkin tags: trunk | |
Changes
Changes to SQLite.NET.Settings.targets.
︙ | ︙ | |||
161 162 163 164 165 166 167 168 169 170 171 172 173 174 | the "INTEROP_EXTRA_DEFINES" macro in the build properties file: "SQLite.Interop\props\SQLite.Interop.20XX.[vs]props" both for the corresponding version(s) of Visual Studio. --> <InteropCodec Condition="'$(InteropCodec)' == ''">true</InteropCodec> </PropertyGroup> <!-- ****************************************************************************** ** Trace Properties ** ****************************************************************************** --> | > > > > > > > | 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | the "INTEROP_EXTRA_DEFINES" macro in the build properties file: "SQLite.Interop\props\SQLite.Interop.20XX.[vs]props" both for the corresponding version(s) of Visual Studio. --> <InteropCodec Condition="'$(InteropCodec)' == ''">true</InteropCodec> <!-- NOTE: Enable the use of native Windows APIs, when available? By default, this is enabled. If this is disabled, all features that require the use of native Windows APIs will be unavailable. --> <UseWindows Condition="'$(UseWindows)' == ''">true</UseWindows> </PropertyGroup> <!-- ****************************************************************************** ** Trace Properties ** ****************************************************************************** --> |
︙ | ︙ |
Changes to System.Data.SQLite/System.Data.SQLite.Properties.targets.
︙ | ︙ | |||
120 121 122 123 124 125 126 127 | <PropertyGroup Condition="'$(TraceStatement)' != 'false'"> <DefineConstants>$(DefineConstants);TRACE_STATEMENT</DefineConstants> </PropertyGroup> <PropertyGroup Condition="'$(TraceWarning)' != 'false'"> <DefineConstants>$(DefineConstants);TRACE_WARNING</DefineConstants> </PropertyGroup> </Project> | > > > > > > > | 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 | <PropertyGroup Condition="'$(TraceStatement)' != 'false'"> <DefineConstants>$(DefineConstants);TRACE_STATEMENT</DefineConstants> </PropertyGroup> <PropertyGroup Condition="'$(TraceWarning)' != 'false'"> <DefineConstants>$(DefineConstants);TRACE_WARNING</DefineConstants> </PropertyGroup> <!-- NOTE: Enable the use of native Windows APIs, when available? --> <PropertyGroup Condition="'$(UseWindows)' != 'false'"> <DefineConstants>$(DefineConstants);WINDOWS</DefineConstants> </PropertyGroup> </Project> |
Changes to tools/install/Installer.2005.csproj.
︙ | ︙ | |||
50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <ItemGroup> <Compile Include="Installer.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> <None Include="Resources\manifest.xml" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <PropertyGroup> <BuildDependsOn> $(BuildDependsOn); EmbedExeManifest; StrongNameSign; </BuildDependsOn> | > | 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | <ItemGroup> <Compile Include="Installer.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> <None Include="Resources\manifest.xml" /> </ItemGroup> <Import Project="$(SQLiteNetDir)\System.Data.SQLite\System.Data.SQLite.Properties.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <PropertyGroup> <BuildDependsOn> $(BuildDependsOn); EmbedExeManifest; StrongNameSign; </BuildDependsOn> |
︙ | ︙ |
Changes to tools/install/Installer.2008.csproj.
︙ | ︙ | |||
51 52 53 54 55 56 57 58 59 60 61 62 63 64 | <ItemGroup> <Compile Include="Installer.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> <None Include="Resources\manifest.xml" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <PropertyGroup> <BuildDependsOn> $(BuildDependsOn); EmbedExeManifest; StrongNameSign; </BuildDependsOn> | > | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | <ItemGroup> <Compile Include="Installer.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> <None Include="Resources\manifest.xml" /> </ItemGroup> <Import Project="$(SQLiteNetDir)\System.Data.SQLite\System.Data.SQLite.Properties.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <PropertyGroup> <BuildDependsOn> $(BuildDependsOn); EmbedExeManifest; StrongNameSign; </BuildDependsOn> |
︙ | ︙ |
Changes to tools/install/Installer.2010.csproj.
︙ | ︙ | |||
51 52 53 54 55 56 57 58 59 60 61 62 63 64 | <ItemGroup> <Compile Include="Installer.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> <None Include="Resources\manifest.xml" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <PropertyGroup> <BuildDependsOn> $(BuildDependsOn); EmbedExeManifest; StrongNameSign; StrongNameSign2; | > | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | <ItemGroup> <Compile Include="Installer.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> <None Include="Resources\manifest.xml" /> </ItemGroup> <Import Project="$(SQLiteNetDir)\System.Data.SQLite\System.Data.SQLite.Properties.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <PropertyGroup> <BuildDependsOn> $(BuildDependsOn); EmbedExeManifest; StrongNameSign; StrongNameSign2; |
︙ | ︙ |
Changes to tools/install/Installer.2012.csproj.
︙ | ︙ | |||
48 49 50 51 52 53 54 55 56 57 58 59 60 61 | <ItemGroup> <Compile Include="Installer.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> <None Include="Resources\manifest.xml" /> </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <PropertyGroup> <BuildDependsOn> $(BuildDependsOn); EmbedExeManifest; StrongNameSign; StrongNameSign2; | > | 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | <ItemGroup> <Compile Include="Installer.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> </ItemGroup> <ItemGroup> <None Include="Resources\manifest.xml" /> </ItemGroup> <Import Project="$(SQLiteNetDir)\System.Data.SQLite\System.Data.SQLite.Properties.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <PropertyGroup> <BuildDependsOn> $(BuildDependsOn); EmbedExeManifest; StrongNameSign; StrongNameSign2; |
︙ | ︙ |
Changes to tools/install/Installer.cs.
︙ | ︙ | |||
8 9 10 11 12 13 14 15 16 17 18 19 20 21 | using System; using System.Collections.Generic; using System.Diagnostics; using System.EnterpriseServices.Internal; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Threading; using System.Windows.Forms; using System.Xml; using Microsoft.Win32; namespace System.Data.SQLite { | > > > > > > > > > > > | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | using System; using System.Collections.Generic; using System.Diagnostics; using System.EnterpriseServices.Internal; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; #if WINDOWS using System.Runtime.InteropServices; #endif using System.Security; #if NET_20 using System.Security.Permissions; #endif using System.Threading; using System.Windows.Forms; using System.Xml; using Microsoft.Win32; namespace System.Data.SQLite { |
︙ | ︙ | |||
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | Default = Medium } #endregion /////////////////////////////////////////////////////////////////////////// #region Installer Class internal static class Installer { #region Private Helper Classes #region AnyPair Class private sealed class AnyPair<T1, T2> { #region Public Constructors // // WARNING: This constructor produces an immutable "empty" pair | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 | Default = Medium } #endregion /////////////////////////////////////////////////////////////////////////// #region Installer Class #if !NET_20 [SecurityCritical()] #else [SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)] #endif internal static class Installer { #region Unsafe Native Methods Class [SuppressUnmanagedCodeSecurity()] private sealed class UnsafeNativeMethods { #if WINDOWS #region Native Win32 Constants private const int MAX_PATH = 260; /////////////////////////////////////////////////////////////////// private const int CSIDL_SYSTEMX86 = 0x0029; /////////////////////////////////////////////////////////////////// private const int SHGFP_TYPE_CURRENT = 0; /////////////////////////////////////////////////////////////////// private const int S_OK = 0; /* HRESULT */ #endregion /////////////////////////////////////////////////////////////////// #region Native Windows Methods [DllImport("shfolder.dll", CallingConvention = CallingConvention.Winapi, CharSet = CharSet.Auto, BestFitMapping = false, ThrowOnUnmappableChar = true, SetLastError = true)] private static extern int SHGetFolderPath( IntPtr hWndOwner, int nFolder, IntPtr hToken, uint flags, IntPtr buffer /* >= MAX_PATH */); #endregion /////////////////////////////////////////////////////////////////// #region Public Wrapper Methods public static string GetSystemDirectory() { IntPtr buffer = IntPtr.Zero; try { buffer = Marshal.AllocCoTaskMem( sizeof(char) * (MAX_PATH + 1)); if (buffer != IntPtr.Zero) { if (SHGetFolderPath(IntPtr.Zero, CSIDL_SYSTEMX86, IntPtr.Zero, SHGFP_TYPE_CURRENT, buffer) == S_OK) { return Marshal.PtrToStringAuto(buffer); } } } catch (Exception e) { // // TODO: Is this the right error handling solution // to use at this point? // TraceOps.DebugAndTrace(TracePriority.MediumHigh, debugCallback, traceCallback, String.Format( "Could not get system directory: {0}", e), traceCategory); throw; } finally { if (buffer != IntPtr.Zero) { Marshal.FreeCoTaskMem(buffer); buffer = IntPtr.Zero; } } return null; } #endregion #endif } #endregion /////////////////////////////////////////////////////////////////////// #region Private Helper Classes #region AnyPair Class private sealed class AnyPair<T1, T2> { #region Public Constructors // // WARNING: This constructor produces an immutable "empty" pair |
︙ | ︙ | |||
1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 | // do nothing. } #endregion /////////////////////////////////////////////////////////////////// #region Public Properties private Guid packageId; public Guid PackageId { get { return packageId; } set { packageId = value; } } | > > > > > > > > > | 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 | // do nothing. } #endregion /////////////////////////////////////////////////////////////////// #region Public Properties private AssemblyName assemblyName; public AssemblyName AssemblyName { get { return assemblyName; } set { assemblyName = value; } } /////////////////////////////////////////////////////////////////// private Guid packageId; public Guid PackageId { get { return packageId; } set { packageId = value; } } |
︙ | ︙ | |||
3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 | thisAssembly.Location); /* NOTE: Same for debug and trace. */ private static TraceCallback debugCallback = AppDebug; private static TraceCallback traceCallback = AppTrace; /////////////////////////////////////////////////////////////////////// private static int filesCreated = 0; private static int filesModified = 0; private static int filesDeleted = 0; #endregion /////////////////////////////////////////////////////////////////////// | > > > > > > > > | 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 | thisAssembly.Location); /* NOTE: Same for debug and trace. */ private static TraceCallback debugCallback = AppDebug; private static TraceCallback traceCallback = AppTrace; /////////////////////////////////////////////////////////////////////// private static string systemDirectory = null; #if WINDOWS private static string systemDirectoryWow64 = null; #endif /////////////////////////////////////////////////////////////////////// private static int filesCreated = 0; private static int filesModified = 0; private static int filesDeleted = 0; #endregion /////////////////////////////////////////////////////////////////////// |
︙ | ︙ | |||
3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 | bool wow64 ) { return String.Format("{0}{1}", RootKeyName, wow64 && Is64BitProcess() ? "\\" + Wow64SubKeyName : String.Empty); } #endregion /////////////////////////////////////////////////////////////////////// #region Generic String Handling private static string ForDisplay( object value | > > > > > > > > > > > > > > > > > > > > > > > > > > > | 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 | bool wow64 ) { return String.Format("{0}{1}", RootKeyName, wow64 && Is64BitProcess() ? "\\" + Wow64SubKeyName : String.Empty); } /////////////////////////////////////////////////////////////////////// private static string GetSystemDirectory( bool wow64 ) { #if WINDOWS if (wow64) { if (systemDirectoryWow64 == null) { systemDirectoryWow64 = UnsafeNativeMethods.GetSystemDirectory(); } return systemDirectoryWow64; } else #endif { if (systemDirectory == null) systemDirectory = Environment.SystemDirectory; return systemDirectory; } } #endregion /////////////////////////////////////////////////////////////////////// #region Generic String Handling private static string ForDisplay( object value |
︙ | ︙ | |||
4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 | } RegistryHelper.SetValue( dataSourceKey, null, String.Format( "{0} Database File", ProjectName), whatIf, verbose); RegistryHelper.CreateSubKey(dataSourceKey, String.Format("SupportingProviders\\{0}", package.DataProviderId.ToString(VsIdFormat)), whatIf, verbose); } } } | > > > > > > > > | 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 | } RegistryHelper.SetValue( dataSourceKey, null, String.Format( "{0} Database File", ProjectName), whatIf, verbose); // // NOTE: This value is new as of 1.0.83.0. // RegistryHelper.SetValue( dataSourceKey, "DefaultProvider", package.DataProviderId.ToString(VsIdFormat), whatIf, verbose); RegistryHelper.CreateSubKey(dataSourceKey, String.Format("SupportingProviders\\{0}", package.DataProviderId.ToString(VsIdFormat)), whatIf, verbose); } } } |
︙ | ︙ | |||
5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 | return false; } RegistryHelper.SetValue( dataProviderKey, null, Description, whatIf, verbose); RegistryHelper.SetValue( dataProviderKey, "InvariantName", InvariantName, whatIf, verbose); RegistryHelper.SetValue( dataProviderKey, "Technology", package.AdoNetTechnologyId.ToString(VsIdFormat), | > > > > > > > > > > > > > > > > | 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 | return false; } RegistryHelper.SetValue( dataProviderKey, null, Description, whatIf, verbose); // // NOTE: This value is new as of 1.0.83.0. // RegistryHelper.SetValue( dataProviderKey, "Assembly", package.AssemblyName.ToString(), whatIf, verbose); // // NOTE: This value is new as of 1.0.83.0. // RegistryHelper.SetValue( dataProviderKey, "AssociatedSource", package.DataSourceId.ToString(VsIdFormat), whatIf, verbose); RegistryHelper.SetValue( dataProviderKey, "InvariantName", InvariantName, whatIf, verbose); RegistryHelper.SetValue( dataProviderKey, "Technology", package.AdoNetTechnologyId.ToString(VsIdFormat), |
︙ | ︙ | |||
5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 | } #endregion /////////////////////////////////////////////////////////////////////// #region Visual Studio Package Handling private static void InitializeVsPackage( ref Package package ) { if (package == null) { package = new Package(); package.AdoNetTechnologyId = new Guid( "77AB9A9D-78B9-4BA7-91AC-873F5338F1D2"); package.PackageId = new Guid( "DCBE6C8D-0E57-4099-A183-98FF74C64D9C"); | > > > | 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 | } #endregion /////////////////////////////////////////////////////////////////////// #region Visual Studio Package Handling private static void InitializeVsPackage( AssemblyName assemblyName, ref Package package ) { if (package == null) { package = new Package(); package.AssemblyName = assemblyName; package.AdoNetTechnologyId = new Guid( "77AB9A9D-78B9-4BA7-91AC-873F5338F1D2"); package.PackageId = new Guid( "DCBE6C8D-0E57-4099-A183-98FF74C64D9C"); |
︙ | ︙ | |||
5435 5436 5437 5438 5439 5440 5441 5442 5443 | "SQLite.Designer.SQLitePackage", whatIf, verbose); RegistryHelper.SetValue(packageKey, "CodeBase", fileName, whatIf, verbose); RegistryHelper.SetValue(packageKey, "ID", 400, whatIf, verbose); RegistryHelper.SetValue(packageKey, "InprocServer32", | > > > > > | | | 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 | "SQLite.Designer.SQLitePackage", whatIf, verbose); RegistryHelper.SetValue(packageKey, "CodeBase", fileName, whatIf, verbose); RegistryHelper.SetValue(packageKey, "ID", 400, whatIf, verbose); string directory = GetSystemDirectory(wow64); if (directory == null) directory = String.Empty; RegistryHelper.SetValue(packageKey, "InprocServer32", Path.Combine(directory, "mscoree.dll"), whatIf, verbose); RegistryHelper.SetValue(packageKey, "CompanyName", "http://system.data.sqlite.org/", whatIf, verbose); RegistryHelper.SetValue(packageKey, "MinEdition", "standard", whatIf, verbose); |
︙ | ︙ | |||
5726 5727 5728 5729 5730 5731 5732 | #endregion /////////////////////////////////////////////////////////////// using (MockRegistry registry = new MockRegistry( configuration.WhatIf, false, false)) { | < < < < < < < < < < < < < < < < < < < < > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 | #endregion /////////////////////////////////////////////////////////////// using (MockRegistry registry = new MockRegistry( configuration.WhatIf, false, false)) { #region Core Assembly Name Check // // NOTE: Do this first, before making any changes to the // system, because it will throw an exception if the // file name does not represent a valid managed // assembly. // AssemblyName assemblyName = AssemblyName.GetAssemblyName( configuration.CoreFileName); /* throw */ #endregion /////////////////////////////////////////////////////////// #region System Directory Check // // NOTE: Getting the system directory value here serves // two purposes: // // 1. It enables us to log the system directory // value very early in the installation process // (i.e. even though the value itself is not // needed until much later). // // 2. Since the value is cached, it prevents an // exception from being thrown much later during // the install when the value is queried again // (i.e. with the same value for the "wow64" // parameter). // TraceOps.DebugAndTrace(TracePriority.MediumLow, debugCallback, traceCallback, String.Format( "System directory is {0}.", ForDisplay( GetSystemDirectory(configuration.Wow64))), traceCategory); #endregion /////////////////////////////////////////////////////////// #region .NET Framework / Visual Studio Data Package package = null; FrameworkList frameworkList = null; VsList vsList = null; /////////////////////////////////////////////////////////// InitializeVsPackage(assemblyName, ref package); /////////////////////////////////////////////////////////// InitializeFrameworkList(registry.LocalMachine, configuration, ref frameworkList); InitializeVsList(registry.LocalMachine, configuration, ref vsList); #endregion /////////////////////////////////////////////////////////// #region Shared Client Data Creation object directoryData = new AnyPair<string, bool>( configuration.Directory, configuration.Install); |
︙ | ︙ |