This commit is contained in:
2026-04-17 14:55:32 -04:00
commit bc3ac1d4c9
18017 changed files with 4371742 additions and 0 deletions

View File

@@ -0,0 +1 @@
12

View File

@@ -0,0 +1 @@
12

View File

@@ -0,0 +1,468 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="DBConfiguration.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="RegistryDataPROExe" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPRO.exe</Value>
</Setting>
<Setting Name="ApplicationSettings" Type="System.String" Scope="Application">
<Value Profile="(Default)">applicationSettings</Value>
</Setting>
<Setting Name="DataPRO" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPRO</Value>
</Setting>
<Setting Name="LocalDbFolder" Type="System.String" Scope="Application">
<Value Profile="(Default)">db</Value>
</Setting>
<Setting Name="Mdf" Type="System.String" Scope="Application">
<Value Profile="(Default)">.mdf</Value>
</Setting>
<Setting Name="LogLdf" Type="System.String" Scope="Application">
<Value Profile="(Default)">_log.ldf</Value>
</Setting>
<Setting Name="SqlLocalDBExe" Type="System.String" Scope="Application">
<Value Profile="(Default)">SqlLocalDB.exe</Value>
</Setting>
<Setting Name="StopDataProInstance" Type="System.String" Scope="Application">
<Value Profile="(Default)">stop DataPROInstance</Value>
</Setting>
<Setting Name="DeleteDataProInstance" Type="System.String" Scope="Application">
<Value Profile="(Default)">delete DataPROInstance</Value>
</Setting>
<Setting Name="CreateAndStartDataProInstance" Type="System.String" Scope="Application">
<Value Profile="(Default)">create DataPROInstance -s</Value>
</Setting>
<Setting Name="RegistrySoftwareMicrosoftMicrosoftSQLServerLocalDBInstalledVersions" Type="System.String" Scope="Application">
<Value Profile="(Default)">SOFTWARE\\Microsoft\\Microsoft SQL Server Local DB\\Installed Versions</Value>
</Setting>
<Setting Name="InstanceAPIPath" Type="System.String" Scope="Application">
<Value Profile="(Default)">InstanceAPIPath</Value>
</Setting>
<Setting Name="SqlUserInstanceDll" Type="System.String" Scope="Application">
<Value Profile="(Default)">SqlUserInstance.dll</Value>
</Setting>
<Setting Name="LocalDB" Type="System.String" Scope="Application">
<Value Profile="(Default)">LocalDB</Value>
</Setting>
<Setting Name="Tools" Type="System.String" Scope="Application">
<Value Profile="(Default)">Tools</Value>
</Setting>
<Setting Name="ScriptsFolder" Type="System.String" Scope="Application">
<Value Profile="(Default)">SQL Server Scripts</Value>
</Setting>
<Setting Name="AttachDBsbat" Type="System.String" Scope="Application">
<Value Profile="(Default)">AttachDBs.bat</Value>
</Setting>
<Setting Name="InstallerDatabaseAttach_Status" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database Attach Status</Value>
</Setting>
<Setting Name="InstallerDatabaseAttach_SqlServerLocalDbNotInstalled" Type="System.String" Scope="Application">
<Value Profile="(Default)">SQL Server LocalDb is not installed.</Value>
</Setting>
<Setting Name="InstallerDatabaseAttach_Success" Type="System.String" Scope="Application">
<Value Profile="(Default)">Databases were successfully attached to (localdb)\DataPROInstance.</Value>
</Setting>
<Setting Name="Versions" Type="System.String" Scope="Application">
<Value Profile="(Default)">versions</Value>
</Setting>
<Setting Name="ISO" Type="System.String" Scope="Application">
<Value Profile="(Default)">ISO</Value>
</Setting>
<Setting Name="CreateDataProInstance" Type="System.String" Scope="Application">
<Value Profile="(Default)">create DataPROInstance</Value>
</Setting>
<Setting Name="StartDataProInstance" Type="System.String" Scope="Application">
<Value Profile="(Default)">start DataPROInstance</Value>
</Setting>
<Setting Name="DataPROInstallationCompletedSuccessfully" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPRO installation completed successfully</Value>
</Setting>
<Setting Name="InstallationStatus" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPRO Installation status</Value>
</Setting>
<Setting Name="SqlServerLocalDbNotInstalled" Type="System.String" Scope="Application">
<Value Profile="(Default)">SQL Server LocalDb is not installed.</Value>
</Setting>
<Setting Name="InstallRedistributablesbat" Type="System.String" Scope="Application">
<Value Profile="(Default)">InstallRedistributables.bat</Value>
</Setting>
<Setting Name="ShareDataProInstance" Type="System.String" Scope="Application">
<Value Profile="(Default)">share DataPROInstance DataPROInstanceShared</Value>
</Setting>
<Setting Name="Db" Type="System.String" Scope="Application">
<Value Profile="(Default)">.db</Value>
</Setting>
<Setting Name="LocalDbDataPROInstance" Type="System.String" Scope="Application">
<Value Profile="(Default)">(localdb)\DataPROInstance</Value>
</Setting>
<Setting Name="DatabaseMigrationRequired" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database migration is required. This may take awhile.{0}Click OK to export data from previous database, or Cancel to postpone the update (this will require using the previous version of DataPRO until the update is completed manually at a more convenient time).</Value>
</Setting>
<Setting Name="Warning" Type="System.String" Scope="Application">
<Value Profile="(Default)">Warning</Value>
</Setting>
<Setting Name="ActionRequired" Type="System.String" Scope="Application">
<Value Profile="(Default)">Action required</Value>
</Setting>
<Setting Name="AttachEmptyDbOnCentralServer" Type="System.String" Scope="Application">
<Value Profile="(Default)">An empty DataPROPre20 database must be attached on your central server.{0}Copy DataPROPre20.mdf and DataPROPre20_log.ldf from C:\DTS\DTS.Suite\&lt;version&gt;\DataPRO\db to your centralized server, and attach it.{0}Click OK when done or Cancel to continue using previous version of DataPRO.</Value>
</Setting>
<Setting Name="DatabaseImportCancelled" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database import was cancelled.{0}Previous version of DataPRO must be used (or blank local database may be used).</Value>
</Setting>
<Setting Name="DatabaseMigrationCancelled" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database migration was cancelled.{0}Previous version of DataPRO must be used (or blank local database may be used).</Value>
</Setting>
<Setting Name="DatabaseCopied" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database was successfully copied.</Value>
</Setting>
<Setting Name="Success" Type="System.String" Scope="Application">
<Value Profile="(Default)">Success</Value>
</Setting>
<Setting Name="LocalDatabaseMigrationFailed" Type="System.String" Scope="Application">
<Value Profile="(Default)">Local database migration has failed.{0}{0}The previous version of DataPRO must be used or this version can be used with its blank database.{0}{0}Please contact DTS Support.{0}{0}{1}{2}</Value>
</Setting>
<Setting Name="ImportChoice" Type="System.String" Scope="Application">
<Value Profile="(Default)">The data from the previous version of DataPRO has been exported to {0}.{1}Importing this data into the new DataPRO database could take up to twice as long as the export just did.{1}Click OK to finish the migration, or Cancel to postpone the update (this will require using the previous version of DataPRO until the update is completed manually at a more convenient time).</Value>
</Setting>
<Setting Name="DatabaseVersionError" Type="System.String" Scope="Application">
<Value Profile="(Default)">An error occurred while attempting to determine the previous database version. Database was not copied.{0}Please contact DTS support.</Value>
</Setting>
<Setting Name="DatabaseNotCopied" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database copy prior to migration has failed.{0}Previous version of DataPRO must be used. Please contact DTS Support.</Value>
</Setting>
<Setting Name="Pre20" Type="System.String" Scope="Application">
<Value Profile="(Default)">Pre20</Value>
</Setting>
<Setting Name="DatabaseSwitchInstructions" Type="System.String" Scope="Application">
<Value Profile="(Default)">The following steps are required and can be found in more detail in the DataPRO manual:{0}1) Backup the DataPRO database as DatePROPre20;{1}2) Detach the DataPRO database;{1}3) Restore the backup as DataPROPre20;{1}4) Copy DataPRO.mdf and DataPRO_log.ldf from C:\DTS\DTS.Suite\&lt;version&gt;\DataPRO\db to server;{1}5) Attach DataPRO database.{0}Click OK when all steps have been completed.</Value>
</Setting>
<Setting Name="DatabaseSwitchingRequired" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database migration is required.{0}This requires the following steps which can be found in more detail in the DataPRO manual:{0}1) Backup the centralized DataPRO database,{1}2) Detach the centralized DataPRO database,{1}3) Restore from the backup as DataPROPre20,{1}4) Copy DataPRO.mdf and DataPRO_log.ldf from C:\DTS\DTS.Suite\&lt;version&gt;\DataPRO\db,{1} 5) Attach DataPRO database.{0}Click OK to migrate the previous database, or Cancel to postpone the update (this will require using the previous version of DataPRO until the update is completed manually at a more convenient time).</Value>
</Setting>
<Setting Name="DetachDBsbat" Type="System.String" Scope="Application">
<Value Profile="(Default)">DetachDBs.bat</Value>
</Setting>
<Setting Name="DataPROSQLFolder" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPRO_SQL</Value>
</Setting>
<Setting Name="AttachDataPROPre20Remotebat" Type="System.String" Scope="Application">
<Value Profile="(Default)">Attach_DataPROPre20_RemoteDB.bat</Value>
</Setting>
<Setting Name="SQLServerScriptsFolder" Type="System.String" Scope="Application">
<Value Profile="(Default)">SQL Server Scripts</Value>
</Setting>
<Setting Name="AttachDataPRORemotebat" Type="System.String" Scope="Application">
<Value Profile="(Default)">Attach_DataPRO_RemoteDB.bat</Value>
</Setting>
<Setting Name="AttachISORemotebat" Type="System.String" Scope="Application">
<Value Profile="(Default)">Attach_ISO_RemoteDB.bat</Value>
</Setting>
<Setting Name="DetachRemoteDBbat" Type="System.String" Scope="Application">
<Value Profile="(Default)">Detach_RemoteDB.bat</Value>
</Setting>
<Setting Name="BackupAlterDetachbat" Type="System.String" Scope="Application">
<Value Profile="(Default)">Backup_Alter_Detach_RemoteDBs.bat</Value>
</Setting>
<Setting Name="RestoreAsDataPROPre20bat" Type="System.String" Scope="Application">
<Value Profile="(Default)">Restore_As_DataPROPre20_RemoteDB.bat</Value>
</Setting>
<Setting Name="BackupBak" Type="System.String" Scope="Application">
<Value Profile="(Default)">Backup.bak</Value>
</Setting>
<Setting Name="CentralizedDatabaseMigrationFailed" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database migration has failed.{0}{0}The previous version of DataPRO must be used with the previous database or this version can be used with a blank local database.{0}{0}Please contact DTS Support.{0}{0}{1}{2}</Value>
</Setting>
<Setting Name="Initial" Type="System.String" Scope="Application">
<Value Profile="(Default)">Initial</Value>
</Setting>
<Setting Name="Backupbat" Type="System.String" Scope="Application">
<Value Profile="(Default)">Backup_RemoteDB.bat</Value>
</Setting>
<Setting Name="NetworkError" Type="System.String" Scope="Application">
<Value Profile="(Default)">Network error! {0}; Click 'OK' to retry or 'Abort' to terminate database setup.</Value>
</Setting>
<Setting Name="AccessError" Type="System.String" Scope="Application">
<Value Profile="(Default)">Access error: {0}</Value>
</Setting>
<Setting Name="AccessRetry" Type="System.String" Scope="Application">
<Value Profile="(Default)">To retry database migration, give this user Administrator privileges on the server and click 'OK'.</Value>
</Setting>
<Setting Name="DataPROInstallationCancelled" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPRO installation was cancelled by user</Value>
</Setting>
<Setting Name="PreviousDatabaseNotCopied" Type="System.String" Scope="Application">
<Value Profile="(Default)">Source database was not copied: </Value>
</Setting>
<Setting Name="ConfirmAbort" Type="System.String" Scope="Application">
<Value Profile="(Default)">Are you sure you want to discontinue?</Value>
</Setting>
<Setting Name="DatabaseMigrationCompletedSuccessfully" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database migration completed successfully</Value>
</Setting>
<Setting Name="DatabaseStandAloneMigrationCancelled" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database migration was cancelled</Value>
</Setting>
<Setting Name="InstallerCustomActions" Type="System.String" Scope="Application">
<Value Profile="(Default)">InstallerCustomActions</Value>
</Setting>
<Setting Name="ISOMMEDbLocation" Type="System.String" Scope="Application">
<Value Profile="(Default)">ISO\mme_code.mdb</Value>
</Setting>
<Setting Name="SourceDbSameAsDestination" Type="System.String" Scope="Application">
<Value Profile="(Default)">Source database is same as destination</Value>
</Setting>
<Setting Name="BlankDestinationDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Destination database is blank and not allowed to be overwritten</Value>
</Setting>
<Setting Name="DataPROBlankMdf" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPROBlank.mdf</Value>
</Setting>
<Setting Name="InvalidSourceDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Invalid source database name</Value>
</Setting>
<Setting Name="LocalSourceDbToBeMigrated" Type="System.String" Scope="Application">
<Value Profile="(Default)">Local source database to be migrated</Value>
</Setting>
<Setting Name="LocalSourceDbToBeMigratedVersion" Type="System.String" Scope="Application">
<Value Profile="(Default)">Local source database to be migrated (Version {0})</Value>
</Setting>
<Setting Name="InvalidSourceDbVersion" Type="System.String" Scope="Application">
<Value Profile="(Default)">Invalid source database version</Value>
</Setting>
<Setting Name="DbVersionsAreTheSame" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database versions are the same</Value>
</Setting>
<Setting Name="SourceDbVersionCannotBeGreaterThanDestination" Type="System.String" Scope="Application">
<Value Profile="(Default)">Source database version cannot be greater than destination</Value>
</Setting>
<Setting Name="NetworkPathNotFound" Type="System.String" Scope="Application">
<Value Profile="(Default)">The network path was not found</Value>
</Setting>
<Setting Name="ExceptionWhileUsingPrevDbStructure" Type="System.String" Scope="Application">
<Value Profile="(Default)">Exception while using previous database structure: {0}</Value>
</Setting>
<Setting Name="ResultOnCentralServer" Type="System.String" Scope="Application">
<Value Profile="(Default)">Result of querying tblDataPRODbVersion on central server is {0}</Value>
</Setting>
<Setting Name="ResultOnLocal" Type="System.String" Scope="Application">
<Value Profile="(Default)">Result of querying tblDataPRODbVersion locally is {0}</Value>
</Setting>
<Setting Name="MigratingTempCentralizedDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Migrating temporary centralized database from version {0} to {1}...</Value>
</Setting>
<Setting Name="DetachingTempLocalDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Detaching temporary local database...</Value>
</Setting>
<Setting Name="MigratingTempLocalDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Migrating temporary local database from version {0} to {1}...</Value>
</Setting>
<Setting Name="AttachingBlankDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Attaching blank current database for migration...</Value>
</Setting>
<Setting Name="CopyingDataPRODb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Copying DataPRO database as {0}...</Value>
</Setting>
<Setting Name="WasCopied" Type="System.String" Scope="Application">
<Value Profile="(Default)">{0} was copied as {1}</Value>
</Setting>
<Setting Name="AttachingRemoteISODb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Attaching remote ISO database...</Value>
</Setting>
<Setting Name="DeletingRemoteISOLog" Type="System.String" Scope="Application">
<Value Profile="(Default)">Deleting remote ISO_log.ldf...</Value>
</Setting>
<Setting Name="CopyingISOToRemote" Type="System.String" Scope="Application">
<Value Profile="(Default)">Copying newly-installed ISO.mdf to remote server...</Value>
</Setting>
<Setting Name="AttachingRemoteDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Attaching remote {0} database...</Value>
</Setting>
<Setting Name="DeletingRemoteLog" Type="System.String" Scope="Application">
<Value Profile="(Default)">Deleting remote {0}_Log.ldf..."</Value>
</Setting>
<Setting Name="CopyingNewDataPROMdfToRemote" Type="System.String" Scope="Application">
<Value Profile="(Default)">Copying newly-installed DataPRO.mdf to remote server...</Value>
</Setting>
<Setting Name="AttachingRemotePre20Db" Type="System.String" Scope="Application">
<Value Profile="(Default)">Attaching remote {0}Pre20 database...</Value>
</Setting>
<Setting Name="DeletingRemotePre20Log" Type="System.String" Scope="Application">
<Value Profile="(Default)">Deleting remote {0}Pre20_Log.ldf...</Value>
</Setting>
<Setting Name="CopyingNewDataPROPre20MdfToRemote" Type="System.String" Scope="Application">
<Value Profile="(Default)">Copying newly-installed DataPROPre20.mdf to remote server...</Value>
</Setting>
<Setting Name="MigratingPrevCentralizedDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Migrating previous centralized database from version {0} to {1}...</Value>
</Setting>
<Setting Name="BackingUpRemoteDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Backing up remote {0} database...</Value>
</Setting>
<Setting Name="DeletingRemoteDataPROBackupBak" Type="System.String" Scope="Application">
<Value Profile="(Default)">Deleting remote DataPROBackup.bak...</Value>
</Setting>
<Setting Name="DetachingRemoteTempPre20Db" Type="System.String" Scope="Application">
<Value Profile="(Default)">Detaching remote temporary {0}Pre20 database...</Value>
</Setting>
<Setting Name="MigratingPrevCentralizedDbToIntermediate" Type="System.String" Scope="Application">
<Value Profile="(Default)">Migrating previous centralized database from version {0} to intermediate version {1}...</Value>
</Setting>
<Setting Name="RestoringRemoteDataPROAsPre20" Type="System.String" Scope="Application">
<Value Profile="(Default)">Restoring remote DataPRO database as DataPROPre20...</Value>
</Setting>
<Setting Name="DeletingRemotePre20Mdf" Type="System.String" Scope="Application">
<Value Profile="(Default)">Deleting remote {0}Pre20.mdf...</Value>
</Setting>
<Setting Name="BackingUpAlteringDetachingRemoteDbAndISO" Type="System.String" Scope="Application">
<Value Profile="(Default)">Backing up, Altering, and Detaching remote {0} and ISO database...</Value>
</Setting>
<Setting Name="DeletingRemoteBackupBak" Type="System.String" Scope="Application">
<Value Profile="(Default)">Deleting remote {0}Backup.bak ...</Value>
</Setting>
<Setting Name="BackingUpAlteringDetachingRemoteDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Backing up, Altering, and Detaching remote {0} database...</Value>
</Setting>
<Setting Name="ImportingToNewCentralizedDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Importing to new centralized database from {0}...</Value>
</Setting>
<Setting Name="ExportingPrevDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Exporting previous database to {0}...</Value>
</Setting>
<Setting Name="MigratingPrevCentralizedDbFromVersion" Type="System.String" Scope="Application">
<Value Profile="(Default)">Migrating previous centralized database from version {0}</Value>
</Setting>
<Setting Name="QueryingCentralizedDbVersion" Type="System.String" Scope="Application">
<Value Profile="(Default)">Querying centralized database version...</Value>
</Setting>
<Setting Name="CopyingPrevLocalDbNoMigration" Type="System.String" Scope="Application">
<Value Profile="(Default)">Copying previous local database; no migration is required...</Value>
</Setting>
<Setting Name="DetachingLocalISODb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Detaching local ISO database...</Value>
</Setting>
<Setting Name="MigratingPrevLocalDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Migrating previous local database from version {0} to {1}...</Value>
</Setting>
<Setting Name="AttachingPrevLocalDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Attaching copy of local source database...</Value>
</Setting>
<Setting Name="CopyingPrevLocalDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Copying local source database...</Value>
</Setting>
<Setting Name="TempAttachingCopyPrevLocalDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Temporarily attaching copy of local source database...</Value>
</Setting>
<Setting Name="ImportingToTempLocalDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Importing to temporary local database from {0}...</Value>
</Setting>
<Setting Name="AttachingBlankLocalTempDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Attaching new blank local temporary database for import from {0}...</Value>
</Setting>
<Setting Name="QueryingPrevLocalDbVersion" Type="System.String" Scope="Application">
<Value Profile="(Default)">Querying local source database version...</Value>
</Setting>
<Setting Name="DataPROBlankLogLdf" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPROBlank_log.ldf</Value>
</Setting>
<Setting Name="InvalidDestinationDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Invalid destination database path</Value>
</Setting>
<Setting Name="DestinationPathIsNotAllowed" Type="System.String" Scope="Application">
<Value Profile="(Default)">Destination database cannot be created in working directory</Value>
</Setting>
<Setting Name="Migrate" Type="System.String" Scope="Application">
<Value Profile="(Default)">Migrate</Value>
</Setting>
<Setting Name="LocalDestDbPath" Type="System.String" Scope="Application">
<Value Profile="(Default)">Local destination database path (Version will be {0})</Value>
</Setting>
<Setting Name="Quit" Type="System.String" Scope="Application">
<Value Profile="(Default)">Quit</Value>
</Setting>
<Setting Name="WarningAllowStreamingModesWasNotMigrated" Type="System.String" Scope="Application">
<Value Profile="(Default)">Warning: The AllowStreaming config setting was not migrated and has been set to False.{0}{0}An "Allow streaming modes" checkbox is now in the "Test setup settings" step of the "System Settings" tab.</Value>
</Setting>
<Setting Name="Initialize" Type="System.String" Scope="Application">
<Value Profile="(Default)">Initialize</Value>
</Setting>
<Setting Name="LocalSourceDbToBeInitialized" Type="System.String" Scope="Application">
<Value Profile="(Default)">Local source database to be initialized</Value>
</Setting>
<Setting Name="LocalDestDbToBeInitializedPath" Type="System.String" Scope="Application">
<Value Profile="(Default)">Local destination database path</Value>
</Setting>
<Setting Name="DatabaseInitializationCompletedSuccessfully" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database initialization completed successfully</Value>
</Setting>
<Setting Name="DatabaseStandAloneInitializationCancelled" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database initialization was cancelled</Value>
</Setting>
<Setting Name="DatabaseInitializationVersionError" Type="System.String" Scope="Application">
<Value Profile="(Default)">Invalid database version. Database initialization was not done.</Value>
</Setting>
<Setting Name="CreatingBackupDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Creating a backup database...</Value>
</Setting>
<Setting Name="DetachingLocalMigratedDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Detaching local {0} database...</Value>
</Setting>
<Setting Name="CentralizedDatabaseShouldBeBackedUp" Type="System.String" Scope="Application">
<Value Profile="(Default)">Before proceeding with database migration, ensure that all data has been backed up. {0}</Value>
</Setting>
<Setting Name="CentralizedDatabaseMigrationCancelled" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database migration has been cancelled.</Value>
</Setting>
<Setting Name="DisplayDatabaseVersion" Type="System.String" Scope="Application">
<Value Profile="(Default)">Database is version {0}</Value>
</Setting>
<Setting Name="NoMigrationNeeded" Type="System.String" Scope="Application">
<Value Profile="(Default)">No migration was done.{0}Old db version: {1}; New db version: {2}</Value>
</Setting>
<Setting Name="InitializingDb" Type="System.String" Scope="Application">
<Value Profile="(Default)">Initializing local database to be {0}-centric{1}...</Value>
</Setting>
<Setting Name="Aero" Type="System.String" Scope="Application">
<Value Profile="(Default)">Aero</Value>
</Setting>
<Setting Name="Crash" Type="System.String" Scope="Application">
<Value Profile="(Default)">Crash</Value>
</Setting>
<Setting Name="TSRAIR" Type="System.String" Scope="Application">
<Value Profile="(Default)">TSR AIR</Value>
</Setting>
<Setting Name="ThirtySeconds" Type="System.String" Scope="Application">
<Value Profile="(Default)"> (this may take up to 30 seconds)</Value>
</Setting>
<Setting Name="DownloadFolder" Type="System.String" Scope="Application">
<Value Profile="(Default)">DownloadFolder</Value>
</Setting>
<Setting Name="DataUpOneLevel" Type="System.String" Scope="Application">
<Value Profile="(Default)">..\Data</Value>
</Setting>
<Setting Name="ConfigDidNotNeedToBeUpdated" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPRO.exe.config did not need to be updated.</Value>
</Setting>
<Setting Name="ConfigWasUpdated" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPRO.exe.config was updated from the {0} installation.</Value>
</Setting>
<Setting Name="UserSettings" Type="System.String" Scope="Application">
<Value Profile="(Default)">userSettings</Value>
</Setting>
<Setting Name="Setting" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPRO.exe</Value>
</Setting>
<Setting Name="NewSettingsCouldNotBeFound" Type="System.String" Scope="Application">
<Value Profile="(Default)">Warning: DataPRO.exe.config was not updated because config settings from new version of DataPRO could not be found: {0}; {1}</Value>
</Setting>
<Setting Name="NewSettingsCouldNotBeProcessed" Type="System.String" Scope="Application">
<Value Profile="(Default)">Warning: DataPRO.exe.config was not updated because config settings from new version of DataPRO could not be processed.</Value>
</Setting>
<Setting Name="ConfigMigrationStatus" Type="System.String" Scope="Application">
<Value Profile="(Default)">Config migration status</Value>
</Setting>
<Setting Name="TSRAIRGoInstallationCompletedSuccessfully" Type="System.String" Scope="Application">
<Value Profile="(Default)">TSR AIR Go installation completed successfully</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace OpenFolder.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.10.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,324 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace MigrateConfiguration.Resources {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class StringResources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal StringResources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MigrateConfiguration.Resources.StringResources", typeof(StringResources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to applicationSettings.
/// </summary>
internal static string ApplicationSettings {
get {
return ResourceManager.GetString("ApplicationSettings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to DataPRO.exe.config did not need to be updated..
/// </summary>
internal static string ConfigDidNotNeedToBeUpdated {
get {
return ResourceManager.GetString("ConfigDidNotNeedToBeUpdated", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Config migration status.
/// </summary>
internal static string ConfigMigrationStatus {
get {
return ResourceManager.GetString("ConfigMigrationStatus", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to DataPRO.exe.config was updated from the {0} installation..
/// </summary>
internal static string ConfigWasUpdated {
get {
return ResourceManager.GetString("ConfigWasUpdated", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to DataPROWin7.Properties.Settings.
/// </summary>
internal static string DataPROWin7PropertiesSettings {
get {
return ResourceManager.GetString("DataPROWin7PropertiesSettings", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to ..\Data.
/// </summary>
internal static string DataUpOneLevel {
get {
return ResourceManager.GetString("DataUpOneLevel", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to ..\..\Data.
/// </summary>
internal static string DataUpTwoLevels {
get {
return ResourceManager.GetString("DataUpTwoLevels", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to DownloadFolder.
/// </summary>
internal static string DownloadFolder {
get {
return ResourceManager.GetString("DownloadFolder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to DTS.Common.Core.PluginLib.Config.
/// </summary>
internal static string DTSCommonCorePluginLibConfig {
get {
return ResourceManager.GetString("DTSCommonCorePluginLibConfig", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to DTSPlugins.
/// </summary>
internal static string DTSPlugins {
get {
return ResourceManager.GetString("DTSPlugins", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The &apos;DTSPlugins&apos; key in DataPRO.exe.config must be manually changed to &apos;..//RunTimeModules&apos;.
/// </summary>
internal static string DTSPluginsNeedsModification {
get {
return ResourceManager.GetString("DTSPluginsNeedsModification", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to DTSViewerModules.
/// </summary>
internal static string DTSViewerModules {
get {
return ResourceManager.GetString("DTSViewerModules", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Failed to copy license.
/// </summary>
internal static string FailedToCopyLicense {
get {
return ResourceManager.GetString("FailedToCopyLicense", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to ImportArchiveFolder.
/// </summary>
internal static string ImportArchiveFolder {
get {
return ResourceManager.GetString("ImportArchiveFolder", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to ..\..\ImportArchive.
/// </summary>
internal static string ImportArchiveUpTwoLevels {
get {
return ResourceManager.GetString("ImportArchiveUpTwoLevels", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Installer license file found and copied.
/// </summary>
internal static string InstallerLicenseFileFoundCopied {
get {
return ResourceManager.GetString("InstallerLicenseFileFoundCopied", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to DTSPlugins key not found: {0}.
/// </summary>
internal static string KeyNotFound {
get {
return ResourceManager.GetString("KeyNotFound", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Warning: DataPRO.exe.config was not updated because config settings from new version of DataPRO could not be found: {0}; {1}.
/// </summary>
internal static string NewSettingsCouldNotBeFound {
get {
return ResourceManager.GetString("NewSettingsCouldNotBeFound", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Warning: DataPRO.exe.config was not updated because config settings from new version of DataPRO could not be processed..
/// </summary>
internal static string NewSettingsCouldNotBeProcessed {
get {
return ResourceManager.GetString("NewSettingsCouldNotBeProcessed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No license found to copy.
/// </summary>
internal static string NoLicenseFound {
get {
return ResourceManager.GetString("NoLicenseFound", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Old license found and copied.
/// </summary>
internal static string OldLicenseFoundCopied {
get {
return ResourceManager.GetString("OldLicenseFoundCopied", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Warning: DataPRO.exe.config was not updated because config settings from previously-installed version of DataPRO could not be found: {0}; {1}.
/// </summary>
internal static string OldSettingsCouldNotBeFound {
get {
return ResourceManager.GetString("OldSettingsCouldNotBeFound", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Warning: DataPRO.exe.config was not updated because config settings from previously-installed version of DataPRO could not be processed..
/// </summary>
internal static string OldSettingsCouldNotBeProcessed {
get {
return ResourceManager.GetString("OldSettingsCouldNotBeProcessed", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to DataPRO.exe.
/// </summary>
internal static string RegistryDataPROExe {
get {
return ResourceManager.GetString("RegistryDataPROExe", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to RunTimeModules.
/// </summary>
internal static string RunTimeModules {
get {
return ResourceManager.GetString("RunTimeModules", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to DTS.Common.Core.PluginLib.Config section not found.
/// </summary>
internal static string SectionNotFound {
get {
return ResourceManager.GetString("SectionNotFound", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Configuration setting not found: {0}.
/// </summary>
internal static string SettingNotFound {
get {
return ResourceManager.GetString("SettingNotFound", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The {0} setting in DataPRO.exe.config was not changed to {1}..
/// </summary>
internal static string ThisSettingNeedsModification {
get {
return ResourceManager.GetString("ThisSettingNeedsModification", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to userSettings.
/// </summary>
internal static string UserSettings {
get {
return ResourceManager.GetString("UserSettings", resourceCulture);
}
}
}
}

View File

@@ -0,0 +1,24 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="LocalSQLDB.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="RegistryDataPROExe" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPRO.exe</Value>
</Setting>
<Setting Name="ApplicationSettings" Type="System.String" Scope="Application">
<Value Profile="(Default)">applicationSettings</Value>
</Setting>
<Setting Name="LocalDbFolder" Type="System.String" Scope="Application">
<Value Profile="(Default)">db</Value>
</Setting>
<Setting Name="Mdf" Type="System.String" Scope="Application">
<Value Profile="(Default)">.mdf</Value>
</Setting>
<Setting Name="LogLdf" Type="System.String" Scope="Application">
<Value Profile="(Default)">_log.ldf</Value>
</Setting>
<Setting Name="DataPRO" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPRO</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -0,0 +1,125 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="WARNING_WINDOWS11" xml:space="preserve">
<value>Installation of Microsoft SQL Server on windows 11 may require some manual steps to run.
See https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/database-file-operations/troubleshoot-os-4kb-disk-sector-size
for more information, or contact DTS support for assistance.</value>
</data>
</root>

View File

@@ -0,0 +1,71 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace RegAddProductCode.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.10.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\Installer")]
public string InstallerKey {
get {
return ((string)(this["InstallerKey"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("No key at {0}")]
public string MissingKey {
get {
return ((string)(this["MissingKey"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("{C4889149-0CAF-44C1-B226-8F6E73684DF4}")]
public string ProductCode {
get {
return ((string)(this["ProductCode"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("SecureRepairPolicy")]
public string SecureRepairPolicy {
get {
return ((string)(this["SecureRepairPolicy"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("SOFTWARE\\\\Policies\\\\Microsoft\\\\Windows\\\\Installer\\\\SecureRepairWhitelist")]
public string SecureRepairWhitelistKey {
get {
return ((string)(this["SecureRepairWhitelistKey"]));
}
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("RegAddProductCode")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("RegAddProductCode")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("8620652f-f86e-466a-8d7b-d3088a7b0c05")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,74 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WarnWindows11.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WarnWindows11.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to Installation of Microsoft SQL Server on windows 11 may require some manual steps to run.
///See https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/database-file-operations/troubleshoot-os-4kb-disk-sector-size
///for more information, or contact DTS support for assistance..
/// </summary>
internal static string WARNING_WINDOWS11 {
get {
return ResourceManager.GetString("WARNING_WINDOWS11", resourceCulture);
}
}
}
}

View File

@@ -0,0 +1,20 @@
using System;
using DTS.Common.Classes.WindowsFolders;
namespace OpenFolder
{
class Folder
{
private static void Main(string[] args)
{
try
{
WindowsFolder.OpenManualsFolder(args[0]);
}
catch (Exception ex)
{
//eat exception
}
}
}
}

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace OpenFolder
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}
}

View File

@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{7A025307-D06E-48FF-A443-DCD16530A6DD}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Common</RootNamespace>
<AssemblyName>Common</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile />
<SccProjectName>
</SccProjectName>
<SccLocalPath>
</SccLocalPath>
<SccAuxPath>
</SccAuxPath>
<SccProvider>
</SccProvider>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="PreviousInstall.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="app.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{FE2740C7-89F2-4669-BA56-ABADA1D5972B}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MigrateConfiguration</RootNamespace>
<AssemblyName>MigrateConfiguration</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<SccProjectName>
</SccProjectName>
<SccLocalPath>
</SccLocalPath>
<SccAuxPath>
</SccAuxPath>
<SccProvider>
</SccProvider>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="ConfigurationMigration.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Resources\StringResources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>StringResources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Common\DTS.Common.Core\DTS.Common.Core.csproj">
<Project>{fab1f470-1574-4301-b56e-d3364aa93679}</Project>
<Name>DTS.Common.Core</Name>
</ProjectReference>
<ProjectReference Include="..\Common\Installer.Common.csproj">
<Project>{7a025307-d06e-48ff-a443-dcd16530a6dd}</Project>
<Name>Installer.Common</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\StringResources.de.resx" />
<EmbeddedResource Include="Resources\StringResources.es.resx" />
<EmbeddedResource Include="Resources\StringResources.fr.resx" />
<EmbeddedResource Include="Resources\StringResources.ja.resx" />
<EmbeddedResource Include="Resources\StringResources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>StringResources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Resources\StringResources.ru.resx" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,472 @@
using System;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MigrateConfiguration.Resources;
using Installer.Common;
using System.IO;
namespace MigrateConfiguration
{
internal static class ConfigurationMigration
{
/// <summary>
/// Get the arguments from the MigrateConfiguration Installer Custom Action and migrates
/// the config values from the most-recently installed version of DataPRO (if any).
/// </summary>
/// <param name="args">
/// [TARGETDIR]
/// [ProductVersion]
/// </param>
private static void Main(string[] args)
{
var targetDir = string.Empty;
var productVersion = new Version();
var noUI = string.Empty;
string setupExeDir = string.Empty;
for (var i = 0; i < args.Length; i++)
{
switch (i)
{
case 0:
targetDir = args[i];
break;
case 1:
productVersion = new Version(args[i]);
break;
case 2:
noUI = args[i];
break;
case 3:
setupExeDir = args[i];
break;
}
}
try
{
if (!System.Diagnostics.EventLog.SourceExists("DataPROInstaller"))
{
System.Diagnostics.EventLog.CreateEventSource("DataPROInstaller", "DataPROInstallerLog");
}
}
catch
{
}
var result = string.Empty;
var allResults = new StringBuilder();
//try
//{
// //Set the DownloadFolder setting to the current default which may be different than an old default
// //before calling UpdateConfigurationIfPossible below, so that we don't stomp on a migrated value
// //from the previous version which is not the old default.
// var settingToFind = StringResources.DownloadFolder;
// var valueToSet = StringResources.DataUpTwoLevels;
// if (!ModifyConfigSetting(targetDir, StringResources.ApplicationSettings, StringResources.DataPROWin7PropertiesSettings, settingToFind, valueToSet, out result))
// {
// allResults = CombineErrorResults(allResults, result);
// allResults.Append("\r\n");
// allResults.Append(string.Format(StringResources.ThisSettingNeedsModification, settingToFind, valueToSet));
// allResults.Append("\r\n");
// }
// //Set the ImportArchiveFolder setting so that it defaults to C:\DTS\DTS.Suite\ImportArchive (..\..\ImportArchive)
// settingToFind = StringResources.ImportArchiveFolder;
// valueToSet = StringResources.ImportArchiveUpTwoLevels;
// if (!ModifyConfigSetting(targetDir, StringResources.ApplicationSettings, StringResources.DataPROWin7PropertiesSettings, settingToFind, valueToSet, out result))
// {
// allResults = CombineErrorResults(allResults, result);
// allResults.Append("\r\n");
// allResults.Append(string.Format(StringResources.ThisSettingNeedsModification, settingToFind, valueToSet));
// allResults.Append("\r\n");
// }
//}
//catch (Exception ex)
//{
// allResults = CombineErrorResults(allResults, ex.Message);
// allResults.Append("\r\n");
//}
//Note that if the old DownloadFolder setting is the old default, we will not migrate it,
//but instead we will use the current default setting that we set above.
UpdateConfigurationIfPossible(targetDir, productVersion, setupExeDir, out result);
allResults.Append(result);
allResults.Append("\r\n");
//try
//{
// if (!FixRunTimeModulesPath(targetDir, StringResources.DTSPlugins, out result))
// {
// allResults = CombineErrorResults(allResults, result);
// allResults.Append("\r\n");
// allResults.Append(StringResources.DTSPluginsNeedsModification);
// allResults.Append("\r\n");
// }
//}
//catch (Exception ex)
//{
// allResults = CombineErrorResults(allResults, ex.Message);
// allResults.Append("\r\n");
//}
if (string.IsNullOrWhiteSpace(allResults.ToString())) return;
if (noUI != "TRUE")
{
MessageBox.Show(allResults.ToString(), StringResources.ConfigMigrationStatus, MessageBoxButtons.OK,
MessageBoxIcon.Information, MessageBoxDefaultButton.Button1,
MessageBoxOptions.DefaultDesktopOnly);
}
}
/// <summary>
/// Get the most-recent previously installed config file and migrate any changed settings to the newly-installed config file
/// </summary>
/// <param name="targetDir">The directory where the new config file resides.</param>
/// <param name="installingVersion">The version of DataPRO that was just installed.</param>
/// <param name="result">Text describing the success/failure of the config migration.</param>
public static void UpdateConfigurationIfPossible(string targetDir, Version installingVersion, string setupExeDir, out string result)
{
var log = new System.Diagnostics.EventLog();
log.Source = "MySource";
result = string.Empty;
var subKey = PreviousInstall.GetMostRecentlyInstalledSubKeyName(installingVersion, out string nextLowerVersion);
//log.WriteEntry("MostRecentlyInstalledSubKeyName = " + subKey);
if (string.IsNullOrWhiteSpace(subKey)) return;
var nextLowerPath = PreviousInstall.GetMostRecentlyInstalledPath(subKey);
var allResults = new StringBuilder();
_ = MigrateLicenseFile(nextLowerVersion, nextLowerPath, targetDir, setupExeDir, out var migrateLicenseResult);
allResults.AppendLine(migrateLicenseResult);
if (allResults.ToString() != StringResources.ConfigDidNotNeedToBeUpdated)
{
//Both user and application values were successful, and at least some user values were updated so
//be sure to return that information if no application values were updated.
result = allResults.ToString();
}
}
private static StringBuilder CombineErrorResults(StringBuilder allResults, string result)
{
if (allResults.Length > 0)
{
allResults.Append("\r\n");
}
allResults.Append(result);
return allResults;
}
/// <summary>
/// Migrates the UserSettings section of the config file
/// </summary>
/// <param name="nextLowerVersion">The DataPRO version of the old config file.</param>
/// <param name="nextLowerPath">The path to the old config file.</param>
/// <param name="targetDir">The path to the new config file.</param>
/// <param name="result">Text describing the success/failure of the config migration.</param>
/// <returns>True if migration succeeded or was not needed due to all defaults in the old config file, false if it failed.</returns>
private static bool MigrateUserSettings(string nextLowerVersion, string nextLowerPath, string targetDir, out string result)
{
return MigrateSettings(StringResources.UserSettings, nextLowerVersion, nextLowerPath, targetDir, out result);
}
/// <summary>
/// identifies if a file is a datapro license
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
private static bool IsDataPROLicense(string path)
{
if (!File.Exists(path)) { return false; }
var contents = File.ReadAllText(path);
if (contents.Contains("<License>") && contents.Contains("<LicenseAttributes>"))
{
return true;
}
return false;
}
/// <summary>
/// finds any licenses in the directory or subdirectories
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
private static string FindLicenseInPath(string path, int subDirectoriesToCheck)
{
if (string.IsNullOrWhiteSpace(path)) { return null; }
if (!Directory.Exists(path)) { return null; }
var files = new DirectoryInfo(path).GetFiles("*.lic");
foreach (var file in files)
{
if (IsDataPROLicense(file.FullName)) { return file.FullName; }
}
if (0 >= subDirectoriesToCheck) { return null; }
subDirectoriesToCheck--;
var directories = new DirectoryInfo(path).GetDirectories();
foreach (var dir in directories)
{
var file = FindLicenseInPath(dir.FullName, subDirectoriesToCheck);
if (!string.IsNullOrWhiteSpace(file)) { return file; }
}
return null;
}
/// <summary>
/// copies license file from old installation to a new installation
/// </summary>
/// <param name="nextLowerVersion">next lowest version installed</param>
/// <param name="nextLowerPath">path to next lower version</param>
/// <param name="targetDir">the directory of the new install</param>
/// <param name="result">displayable string indicating results</param>
/// <returns>true if license file was copied, false otherwise</returns>
private static bool MigrateLicenseFile(string nextLowerVersion, string nextLowerPath, string targetDir, string setupExeDir, out string result)
{
try
{
var installVersionPath = FindLicenseInPath(new DirectoryInfo(setupExeDir).Parent.FullName, 2);
if (null != installVersionPath && File.Exists(installVersionPath))
{
var newPath = Path.Combine(targetDir, new FileInfo(installVersionPath).Name);
File.Copy(installVersionPath, newPath);
result = StringResources.InstallerLicenseFileFoundCopied;
return true;
}
var oldVersionPath = FindLicenseInPath(nextLowerPath, 2);
if (null != oldVersionPath && File.Exists(oldVersionPath))
{
var newPath = Path.Combine(targetDir, new FileInfo(oldVersionPath).Name);
File.Copy(oldVersionPath, newPath);
result = StringResources.OldLicenseFoundCopied;
return true;
}
result = StringResources.NoLicenseFound;
return false;
}
catch (Exception ex)
{
result = $"{StringResources.FailedToCopyLicense} {ex.Message}";
return false;
}
}
/// <summary>
/// Migrates the ApplicationSettings section of the config file
/// </summary>
/// <param name="nextLowerVersion">The DataPRO version of the old config file.</param>
/// <param name="nextLowerPath">The path to the old config file.</param>
/// <param name="targetDir">The path to the new config file.</param>
/// <param name="result">Text describing the success/failure of the config migration.</param>
/// <returns>True if migration succeeded or was not needed due to all defaults in the old config file, false if it failed.</returns>
private static bool MigrateAppSettings(string nextLowerVersion, string nextLowerPath, string targetDir, out string result)
{
return MigrateSettings(StringResources.ApplicationSettings, nextLowerVersion, nextLowerPath, targetDir, out result);
}
/// <summary>
/// If the old config file contains an element in the new config file, and it is different, copy it to the new config file.
/// </summary>
/// <param name="settingsType">Either UserSettings or ApplicationSettings.</param>
/// <param name="nextLowerVersion">The DataPRO version of the old config file.</param>
/// <param name="nextLowerPath">The path to the old config file.</param>
/// <param name="targetDir">The path to the new config file.</param>
/// <param name="result">Text describing the success/failure of the config migration.</param>
/// <returns>True if migration succeeded or was not needed due to all defaults in the old config file, false if it failed.</returns>
private static bool MigrateSettings(string settingsType, string nextLowerVersion, string nextLowerPath, string targetDir, out string result)
{
var oldSettings = new SettingElementCollection();
if (!GetOldSettings(settingsType, nextLowerPath, out result, out oldSettings))
{
return false;
}
else
{
var newSettings = new SettingElementCollection();
Configuration newConfig;
if (!GetNewSettings(settingsType, nextLowerPath, targetDir, out result, out newSettings, out newConfig))
{
return false;
}
else
{
SaveMigratedSettings(nextLowerVersion, oldSettings, newSettings, newConfig, out result);
return true;
}
}
}
/// <summary>
/// Gets the settings from the old config file
/// </summary>
/// <param name="settingsType">Either UserSettings or ApplicationSettings.</param>
/// <param name="nextLowerPath">The path to the old config file.</param>
/// <param name="result">Text describing the success/failure of the config migration.</param>
/// <param name="oldSettings">The settings from the old config file</param>
/// <returns>True if the settings were successfully found and processed, false if not.</returns>
private static bool GetOldSettings(string settingsType, string nextLowerPath,
out string result, out SettingElementCollection oldSettings)
{
result = string.Empty;
oldSettings = null;
Configuration oldConfig;
var oldPath = string.Empty;
try
{
//Open the config file from the most-recently installed version of DataPRO - this assumes that it was installed in the default folder!!!
oldPath = nextLowerPath + StringResources.RegistryDataPROExe;
oldConfig = ConfigurationManager.OpenExeConfiguration(@oldPath);
}
catch (System.Exception ex)
{
result = string.Format(StringResources.OldSettingsCouldNotBeFound, ex.Message, oldPath);
return false;
}
oldSettings = GetConfigSettings(settingsType, oldConfig);
if (oldSettings != null) return true;
result = StringResources.OldSettingsCouldNotBeProcessed;
return false;
}
/// <summary>
/// Gets the settings from the new config file
/// </summary>
/// <param name="settingsType">Either UserSettings or ApplicationSettings.</param>
/// <param name="nextLowerPath">The path to the old config file.</param>
/// <param name="targetDir">The target directory</param>
/// <param name="result">Text describing the success/failure of the config migration.</param>
/// <param name="newSettings">The settings from the new config file</param>
/// <param name="newConfig">The new config file to be modified</param>
/// <returns>True if the settings were successfully found and processed, false if not.</returns>
private static bool GetNewSettings(string settingsType, string nextLowerPath, string targetDir,
out string result, out SettingElementCollection newSettings, out Configuration newConfig)
{
result = string.Empty;
newSettings = null;
newConfig = null;
//Configuration newConfig;
var newPath = string.Empty;
try
{
//Open the new config file just installed
newPath = Path.Combine(targetDir, StringResources.RegistryDataPROExe);
newConfig = ConfigurationManager.OpenExeConfiguration(@newPath);
}
catch (System.Exception ex)
{
result = string.Format(StringResources.NewSettingsCouldNotBeFound, ex.Message, newPath);
return false;
}
newSettings = GetConfigSettings(settingsType, newConfig);
if (newSettings != null) return true;
result = StringResources.NewSettingsCouldNotBeProcessed;
return false;
}
/// <summary>
/// Update the new config file if needed
/// </summary>
/// <param name="nextLowerVersion">The highest version installed that is lower than this version</param>
/// <param name="oldSettings">The settings from the old config file</param>
/// <param name="newSettings">The settings from the new config file</param>
/// <param name="newConfig">The config being modified</param>
/// <param name="result">Text describing the success/failure of the config migration.</param>
/// <returns>True if the settings were successfully found and processed, false if not.</returns>
private static void SaveMigratedSettings(string nextLowerVersion, SettingElementCollection oldSettings, SettingElementCollection newSettings,
Configuration newConfig, out string result)
{
var oldSettingsDictionary = oldSettings.Cast<SettingElement>().ToDictionary(oldSetting => oldSetting.Name, oldSetting => oldSetting.Value.ValueXml.InnerXml);
var settingsToBeMigrated = new SettingElementCollection();
foreach (System.Configuration.SettingElement newSetting in newSettings)
{
//If this setting exists in the old config, and it is different than the default that was installed, migrate the value
if (oldSettingsDictionary.ContainsKey(newSetting.Name) &&
oldSettingsDictionary[newSetting.Name] != newSetting.Value.ValueXml.InnerXml)
{
//Only change from the new default DownloadFolder setting to the old DownloadFolder setting if it's not the previous default ("..\Data")
if (newSetting.Name != StringResources.DownloadFolder || oldSettingsDictionary[StringResources.DownloadFolder] != StringResources.DataUpOneLevel)
{
//Add to the list of settings that need to be migrated
settingsToBeMigrated.Add(newSetting);
}
}
}
foreach (System.Configuration.SettingElement settingToBeMigrated in settingsToBeMigrated)
{
//Migrate the changed value(s)
newSettings.Remove(settingToBeMigrated);
settingToBeMigrated.Value.ValueXml.InnerXml = oldSettingsDictionary[settingToBeMigrated.Name];
newSettings.Add(settingToBeMigrated);
}
newConfig.Save();
result = settingsToBeMigrated.Count <= 0 ? StringResources.ConfigDidNotNeedToBeUpdated : string.Format(StringResources.ConfigWasUpdated, nextLowerVersion);
}
/// <summary>
/// This allows you to change a config setting.
/// </summary>
/// <param name="targetDir">The path to the config file</param>
/// <param name="sectionGroupToFind">For example, "applicationSettings"</param>
/// <param name="sectionToFind">For example, "DataPROWin7.Properties.Settings"</param>
/// <param name="settingToFind">For example, "DownloadFolder"</param>
/// <param name="valueToSet">For example, "..\..\Data"</param>
/// <param name="result"></param>
/// <returns></returns>
private static bool ModifyConfigSetting(string targetDir, string sectionGroupToFind, string sectionToFind, string settingToFind, string valueToSet, out string result)
{
result = string.Empty;
try
{
//Open the new config file just installed
var newPath = Path.Combine(targetDir, StringResources.RegistryDataPROExe);
var newConfig = ConfigurationManager.OpenExeConfiguration(@newPath);
var settingFound = false;
var newConfigSectionGroup = newConfig.SectionGroups[sectionGroupToFind];
if (newConfigSectionGroup != null)
{
var applicationSettingsSection = (ClientSettingsSection)newConfigSectionGroup.Sections[sectionToFind];
var element = applicationSettingsSection.Settings.Get(settingToFind);
if (null != element)
{
settingFound = true;
applicationSettingsSection.Settings.Remove(element);
element.Value.ValueXml.InnerXml = valueToSet;
applicationSettingsSection.Settings.Add(element);
newConfig.Save();
}
}
if (!settingFound)
{
result = string.Format(StringResources.SettingNotFound, settingToFind);
return false;
}
}
catch (Exception ex)
{
result = ex.Message;
return false;
}
return true;
}
/// <summary>
/// Gets the settings in a section group of the config file.
/// </summary>
/// <param name="settingsType">Examples include "userSettings" and "applicationSettings"</param>
/// <param name="config">The config file to be interrogated.</param>
/// <returns>A collection of settings from the requested section of the config file.</returns>
private static SettingElementCollection GetConfigSettings(string settingsType, Configuration config)
{
var clientSettingsSection = new ClientSettingsSection();
var configurationSectionGroup = config.SectionGroups[settingsType];
if ((configurationSectionGroup != null) && (configurationSectionGroup.Sections[0] != null))
{
clientSettingsSection = configurationSectionGroup.Sections[0] as System.Configuration.ClientSettingsSection;
}
return clientSettingsSection?.Settings;
}
}
}

View File

@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="LocalSQLDB.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<applicationSettings>
<LocalSQLDB.Properties.Settings>
<setting name="RegistryDataPROExe" serializeAs="String">
<value>DataPRO.exe</value>
</setting>
<setting name="ApplicationSettings" serializeAs="String">
<value>applicationSettings</value>
</setting>
<setting name="LocalDbFolder" serializeAs="String">
<value>db</value>
</setting>
<setting name="Mdf" serializeAs="String">
<value>.mdf</value>
</setting>
<setting name="LogLdf" serializeAs="String">
<value>_log.ldf</value>
</setting>
<setting name="DataPRO" serializeAs="String">
<value>DataPRO</value>
</setting>
</LocalSQLDB.Properties.Settings>
</applicationSettings>
</configuration>

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("MigrateConfiguration")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MigrateConfiguration")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("c255c030-ef08-4974-8654-969e29ab3b77")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace DBConfiguration.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DBConfiguration.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
</configuration>

View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{BEA0001C-8CC8-468A-ADF0-94FF9B1FFCB1}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>LocalSQLDB</RootNamespace>
<AssemblyName>LocalSQLDB</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="LocalDBPreparation.cs" />
<Compile Include="LocalDBPrepare.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Common\Installer.Common.csproj">
<Project>{7a025307-d06e-48ff-a443-dcd16530a6dd}</Project>
<Name>Installer.Common</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,117 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@@ -0,0 +1,109 @@
using System;
using System.Diagnostics;
using Microsoft.Win32;
using System.Windows.Forms;
using RegAddProductCode.Properties;
namespace RegAddProductCode
{
class AddProductCode
{
private static EventLog log = new EventLog();
static int Main(string[] args)
{
var architectureVersion = string.Empty;
for (var i = 0; i < args.Length; i++)
{
switch (i)
{
case 0:
architectureVersion = args[i];
break;
}
}
log.Source = "DataPROInstaller";
log.WriteEntry("ArchitectureVersion is " + architectureVersion);
log.WriteEntry(!Environment.Is64BitProcess ? "This is NOT a 64-bit process" : "This IS a 64-bit process");
log.WriteEntry(Environment.Is64BitOperatingSystem ? "This IS a 64-bit operation system" : "This is NOT a 64-bit operating system");
switch (architectureVersion)
{
case "x86":
if (Environment.Is64BitOperatingSystem)
{
//Return false so the installer will terminate due to running the 32-bit installer
//on a 64-bit operating system. This would be OK, except that if the 32-bit 2014 SqlLocalDb
//installer needs to be installed as a prerequisite, it will fail silently and DataPRO
//will fail upon initiation due to a database with a higher version than what 2012 SqlLocalDb
//can handle.
log.WriteEntry("Displaying 32-bit error message box and returning 1");
MessageBox.Show("32-bit DataPRO is not allowed to be installed on 64-bit operating system");
return 1;
}
break;
case "x64":
if (!Environment.Is64BitOperatingSystem)
{
//Return false so the installer will gracefully terminate instead of less gracefully later.
log.WriteEntry("Displaying 64-bit error message box and returning 1");
MessageBox.Show("64-bit DataPRO is not allowed to be installed on 32-bit operating system");
return 1;
}
break;
}
log.WriteEntry("Calling AddCodeToRegistry");
var result = AddCodeToRegistry();
log.WriteEntry("Result of AddCodeToRegistry is " + result);
//if (!string.IsNullOrWhiteSpace(result))
//{
// MessageBox.Show(result);
//}
log.WriteEntry("Returning 0");
return 0;
}
/// <summary>
/// Ensures that the following is in the Registry:
/// Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer
/// and that it contains the following: Name: SecureRepairPolicy; Type: REG_DWORD; Data 0x00000002 (2)
/// Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer\SecureRepairWhitelist
/// and that it contains the following: Name: {C4889149-0CAF-44C1-B226-8F6E73684DF4}; Type: REG_DWORD; Data 0x00000000 (0)
/// so that the DataPRO.exe (or its dependents) may be installed.
/// </summary>
/// <returns></returns>
private static string AddCodeToRegistry()
{
var result = string.Empty;
try
{
var rk = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
var sk1 = rk.OpenSubKey(Settings.Default.InstallerKey, RegistryKeyPermissionCheck.ReadWriteSubTree,
System.Security.AccessControl.RegistryRights.FullControl);
if (sk1 == null) return string.Format(Settings.Default.MissingKey, Settings.Default.InstallerKey);
sk1.SetValue(Settings.Default.SecureRepairPolicy, 2, RegistryValueKind.DWord);
sk1 = rk.OpenSubKey(Settings.Default.SecureRepairWhitelistKey,
RegistryKeyPermissionCheck.ReadWriteSubTree,
System.Security.AccessControl.RegistryRights.FullControl) ??
Registry.LocalMachine.CreateSubKey(Settings.Default.SecureRepairWhitelistKey);
if (sk1 == null) return string.Format(Settings.Default.MissingKey, Settings.Default.SecureRepairWhitelistKey);
//Add this Product Code
sk1.SetValue(Settings.Default.ProductCode, 0);
}
catch (Exception ex)
{
result = ex.Message;
}
if (!string.IsNullOrWhiteSpace(result))
{
MessageBox.Show(result);
}
return result;
}
}
}

View File

@@ -0,0 +1,207 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ApplicationSettings" xml:space="preserve">
<value>applicationSettings</value>
</data>
<data name="DTSCommonCorePluginLibConfig" xml:space="preserve">
<value>DTS.Common.Core.PluginLib.Config</value>
</data>
<data name="DTSPlugins" xml:space="preserve">
<value>DTSPlugins</value>
</data>
<data name="DTSPluginsNeedsModification" xml:space="preserve">
<value>The 'DTSPlugins' key in DataPRO.exe.config must be manually changed to '..//RunTimeModules'</value>
</data>
<data name="ConfigDidNotNeedToBeUpdated" xml:space="preserve">
<value>DataPRO.exe.config did not need to be updated.</value>
</data>
<data name="ConfigMigrationStatus" xml:space="preserve">
<value>Config migration status</value>
</data>
<data name="NewSettingsCouldNotBeFound" xml:space="preserve">
<value>Warning: DataPRO.exe.config was not updated because config settings from new version of DataPRO could not be found: {0}; {1}</value>
</data>
<data name="NewSettingsCouldNotBeProcessed" xml:space="preserve">
<value>Warning: DataPRO.exe.config was not updated because config settings from new version of DataPRO could not be processed.</value>
</data>
<data name="OldSettingsCouldNotBeFound" xml:space="preserve">
<value>Warning: DataPRO.exe.config was not updated because config settings from previously-installed version of DataPRO could not be found: {0}; {1}</value>
</data>
<data name="OldSettingsCouldNotBeProcessed" xml:space="preserve">
<value>Warning: DataPRO.exe.config was not updated because config settings from previously-installed version of DataPRO could not be processed.</value>
</data>
<data name="ConfigWasUpdated" xml:space="preserve">
<value>DataPRO.exe.config was updated from the {0} installation.</value>
</data>
<data name="RegistryDataPROExe" xml:space="preserve">
<value>DataPRO.exe</value>
</data>
<data name="RunTimeModules" xml:space="preserve">
<value>RunTimeModules</value>
</data>
<data name="UserSettings" xml:space="preserve">
<value>userSettings</value>
</data>
<data name="KeyNotFound" xml:space="preserve">
<value>DTSPlugins key not found: {0}</value>
</data>
<data name="SectionNotFound" xml:space="preserve">
<value>DTS.Common.Core.PluginLib.Config section not found</value>
</data>
<data name="DTSViewerModules" xml:space="preserve">
<value>DTSViewerModules</value>
</data>
<data name="DataPROWin7PropertiesSettings" xml:space="preserve">
<value>DataPROWin7.Properties.Settings</value>
</data>
<data name="DataUpTwoLevels" xml:space="preserve">
<value>..\..\Data</value>
</data>
<data name="DownloadFolder" xml:space="preserve">
<value>DownloadFolder</value>
</data>
<data name="SettingNotFound" xml:space="preserve">
<value>Configuration setting not found: {0}</value>
</data>
<data name="ThisSettingNeedsModification" xml:space="preserve">
<value>The {0} setting in DataPRO.exe.config was not changed to {1}.</value>
</data>
<data name="DataUpOneLevel" xml:space="preserve">
<value>..\Data</value>
</data>
<data name="ImportArchiveFolder" xml:space="preserve">
<value>ImportArchiveFolder</value>
</data>
<data name="ImportArchiveUpTwoLevels" xml:space="preserve">
<value>..\..\ImportArchive</value>
</data>
<data name="FailedToCopyLicense" xml:space="preserve">
<value>Failed to copy license</value>
</data>
<data name="InstallerLicenseFileFoundCopied" xml:space="preserve">
<value>Installer license file found and copied</value>
</data>
<data name="NoLicenseFound" xml:space="preserve">
<value>No license found to copy</value>
</data>
<data name="OldLicenseFoundCopied" xml:space="preserve">
<value>Old license found and copied</value>
</data>
</root>

View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WarnWindows11.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.10.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="InstallerMigrateConfig_ConfigDidNotNeedToBeUpdated" xml:space="preserve">
<value>DataPRO.exe.config не нужно обновлять.</value>
</data>
<data name="InstallerMigrateConfig_ConfigDidNotNeedToBeUpdatedBecausePreviousWasNotFound" xml:space="preserve">
<value>DataPRO.exe.config не нужно обновлять, поскольку ранее установленная версия DataPRO не была найдена.</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseNewSettingsCouldNotBeFound" xml:space="preserve">
<value>Предупреждение: DataPRO.exe.config не обновлялся, потому что не удалось найти параметры конфигурации из новой версии DataPRO: {0}; {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseNewSettingsCouldNotBeProcessed" xml:space="preserve">
<value>Предупреждение: DataPRO.exe.config не обновлялся, потому что не удалось найти параметры конфигурации из новой версии DataPRO: {0}; {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseOldSettingsCouldNotBeFound" xml:space="preserve">
<value>Предупреждение: файл DataPRO.exe.config не был обновлен, потому что не удалось найти параметры конфигурации из ранее установленной версии DataPRO: {0}; {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseOldSettingsCouldNotBeProcessed" xml:space="preserve">
<value>Предупреждение: DataPRO.exe.config не обновлялся, так как настройки конфигурации из ранее установленной версии DataPRO не могли быть обработаны.</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasUpdatedFromTheMostRecentlyInstalledVersionInstallation" xml:space="preserve">
<value>Файл DataPRO.exe.config обновлен с установки {0}.</value>
</data>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="InstallerMigrateConfig_ConfigDidNotNeedToBeUpdated" xml:space="preserve">
<value>DataPRO.exe.configを更新する必要はありませんでした。</value>
</data>
<data name="InstallerMigrateConfig_ConfigDidNotNeedToBeUpdatedBecausePreviousWasNotFound" xml:space="preserve">
<value>以前にインストールされたバージョンのDataPROが見つからないため、DataPRO.exe.configを更新する必要はありませんでした。</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseNewSettingsCouldNotBeFound" xml:space="preserve">
<value>警告新しいバージョンのDataPROの設定が見つからないため、DataPRO.exe.configが更新されませんでした{0}。 {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseNewSettingsCouldNotBeProcessed" xml:space="preserve">
<value>警告新しいバージョンのDataPROの設定が見つからないため、DataPRO.exe.configが更新されませんでした{0}。 {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseOldSettingsCouldNotBeFound" xml:space="preserve">
<value>警告以前にインストールされたバージョンのDataPROの設定が見つかりませんでしたので、DataPRO.exe.configが更新されませんでした{0}。 {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseOldSettingsCouldNotBeProcessed" xml:space="preserve">
<value>警告以前にインストールしたバージョンのDataPROの設定を処理できなかったため、DataPRO.exe.configが更新されませんでした。</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasUpdatedFromTheMostRecentlyInstalledVersionInstallation" xml:space="preserve">
<value>DataPRO.exe.configが{0}インストールから更新されました。</value>
</data>
</root>

View File

@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{FE2740C7-89F2-4669-BA56-ABADA1D5972B}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>MigrateConfiguration</RootNamespace>
<AssemblyName>MigrateConfiguration</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<SccProjectName>
</SccProjectName>
<SccLocalPath>
</SccLocalPath>
<SccAuxPath>
</SccAuxPath>
<SccProvider>
</SccProvider>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="ConfigurationMigration.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Resources\StringResources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>StringResources.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Common\DTS.Common.Core\DTS.Common.Core.csproj">
<Project>{fab1f470-1574-4301-b56e-d3364aa93679}</Project>
<Name>DTS.Common.Core</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Common\DTS.Common.Utilities\DTS.Common.Utilities.csproj">
<Project>{d6da1b74-c711-43c2-91b1-1908a8d04dbf}</Project>
<Name>DTS.Common.Utilities</Name>
</ProjectReference>
<ProjectReference Include="..\Common\Installer.Common.csproj">
<Project>{7a025307-d06e-48ff-a443-dcd16530a6dd}</Project>
<Name>Installer.Common</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\StringResources.de.resx" />
<EmbeddedResource Include="Resources\StringResources.es.resx" />
<EmbeddedResource Include="Resources\StringResources.fr.resx" />
<EmbeddedResource Include="Resources\StringResources.ja.resx" />
<EmbeddedResource Include="Resources\StringResources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>StringResources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Resources\StringResources.ru.resx" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,436 @@
using System;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MigrateConfiguration.Resources;
using Installer.Common;
using System.IO;
using DTS.Common.Utilities;
namespace MigrateConfiguration
{
internal static class ConfigurationMigration
{
/// <summary>
/// Get the arguments from the MigrateConfiguration Installer Custom Action and migrates
/// the config values from the most-recently installed version of DataPRO (if any).
/// </summary>
/// <param name="args">
/// [TARGETDIR]
/// [ProductVersion]
/// </param>
private static void Main(string[] args)
{
var targetDir = string.Empty;
var productVersion = new Version();
var noUI = string.Empty;
string setupExeDir = string.Empty;
for (var i = 0; i < args.Length; i++)
{
switch (i)
{
case 0:
targetDir = args[i];
break;
case 1:
productVersion = new Version(args[i]);
break;
case 2:
noUI = args[i];
break;
case 3:
setupExeDir = args[i];
break;
}
}
try
{
if (!System.Diagnostics.EventLog.SourceExists("DataPROInstaller"))
{
System.Diagnostics.EventLog.CreateEventSource("DataPROInstaller", "DataPROInstallerLog");
}
}
catch
{
}
var result = string.Empty;
var allResults = new StringBuilder();
//try
//{
// //Set the DownloadFolder setting to the current default which may be different than an old default
// //before calling UpdateConfigurationIfPossible below, so that we don't stomp on a migrated value
// //from the previous version which is not the old default.
// var settingToFind = StringResources.DownloadFolder;
// var valueToSet = StringResources.DataUpTwoLevels;
// if (!ModifyConfigSetting(targetDir, StringResources.ApplicationSettings, StringResources.DataPROWin7PropertiesSettings, settingToFind, valueToSet, out result))
// {
// allResults = CombineErrorResults(allResults, result);
// allResults.Append("\r\n");
// allResults.Append(string.Format(StringResources.ThisSettingNeedsModification, settingToFind, valueToSet));
// allResults.Append("\r\n");
// }
// //Set the ImportArchiveFolder setting so that it defaults to C:\DTS\DTS.Suite\ImportArchive (..\..\ImportArchive)
// settingToFind = StringResources.ImportArchiveFolder;
// valueToSet = StringResources.ImportArchiveUpTwoLevels;
// if (!ModifyConfigSetting(targetDir, StringResources.ApplicationSettings, StringResources.DataPROWin7PropertiesSettings, settingToFind, valueToSet, out result))
// {
// allResults = CombineErrorResults(allResults, result);
// allResults.Append("\r\n");
// allResults.Append(string.Format(StringResources.ThisSettingNeedsModification, settingToFind, valueToSet));
// allResults.Append("\r\n");
// }
//}
//catch (Exception ex)
//{
// allResults = CombineErrorResults(allResults, ex.Message);
// allResults.Append("\r\n");
//}
//Note that if the old DownloadFolder setting is the old default, we will not migrate it,
//but instead we will use the current default setting that we set above.
UpdateConfigurationIfPossible(targetDir, productVersion, setupExeDir, out result);
allResults.Append(result);
allResults.Append("\r\n");
//try
//{
// if (!FixRunTimeModulesPath(targetDir, StringResources.DTSPlugins, out result))
// {
// allResults = CombineErrorResults(allResults, result);
// allResults.Append("\r\n");
// allResults.Append(StringResources.DTSPluginsNeedsModification);
// allResults.Append("\r\n");
// }
//}
//catch (Exception ex)
//{
// allResults = CombineErrorResults(allResults, ex.Message);
// allResults.Append("\r\n");
//}
if (string.IsNullOrWhiteSpace(allResults.ToString())) return;
if (noUI != "TRUE")
{
MessageBox.Show(allResults.ToString(), StringResources.ConfigMigrationStatus, MessageBoxButtons.OK,
MessageBoxIcon.Information, MessageBoxDefaultButton.Button1,
MessageBoxOptions.DefaultDesktopOnly);
}
}
/// <summary>
/// Get the most-recent previously installed config file and migrate any changed settings to the newly-installed config file
/// </summary>
/// <param name="targetDir">The directory where the new config file resides.</param>
/// <param name="installingVersion">The version of DataPRO that was just installed.</param>
/// <param name="result">Text describing the success/failure of the config migration.</param>
public static void UpdateConfigurationIfPossible(string targetDir, Version installingVersion, string setupExeDir, out string result)
{
var log = new System.Diagnostics.EventLog();
log.Source = "MySource";
result = string.Empty;
var subKey = PreviousInstall.GetMostRecentlyInstalledSubKeyName(installingVersion, out string nextLowerVersion);
//log.WriteEntry("MostRecentlyInstalledSubKeyName = " + subKey);
if (string.IsNullOrWhiteSpace(subKey)) return;
var nextLowerPath = PreviousInstall.GetMostRecentlyInstalledPath(subKey);
var allResults = new StringBuilder();
_ = MigrateLicenseFile(nextLowerVersion, nextLowerPath, targetDir, setupExeDir, out var migrateLicenseResult);
allResults.AppendLine(migrateLicenseResult);
if (allResults.ToString() != StringResources.ConfigDidNotNeedToBeUpdated)
{
//Both user and application values were successful, and at least some user values were updated so
//be sure to return that information if no application values were updated.
result = allResults.ToString();
}
}
private static StringBuilder CombineErrorResults(StringBuilder allResults, string result)
{
if (allResults.Length > 0)
{
allResults.Append("\r\n");
}
allResults.Append(result);
return allResults;
}
/// <summary>
/// Migrates the UserSettings section of the config file
/// </summary>
/// <param name="nextLowerVersion">The DataPRO version of the old config file.</param>
/// <param name="nextLowerPath">The path to the old config file.</param>
/// <param name="targetDir">The path to the new config file.</param>
/// <param name="result">Text describing the success/failure of the config migration.</param>
/// <returns>True if migration succeeded or was not needed due to all defaults in the old config file, false if it failed.</returns>
private static bool MigrateUserSettings(string nextLowerVersion, string nextLowerPath, string targetDir, out string result)
{
return MigrateSettings(StringResources.UserSettings, nextLowerVersion, nextLowerPath, targetDir, out result);
}
/// <summary>
/// identifies if a file is a datapro license
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
private static bool IsDataPROLicense(string path)
{
if (!File.Exists(path)) { return false; }
var contents = File.ReadAllText(path);
if (contents.Contains("<License>") && contents.Contains("<LicenseAttributes>"))
{
return true;
}
return false;
}
/// <summary>
/// finds any licenses in the directory or subdirectories
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
private static string FindLicenseInPath(string path, int subDirectoriesToCheck)
{
if (string.IsNullOrWhiteSpace(path)) { return null; }
if (!Directory.Exists(path)) { return null; }
var files = new DirectoryInfo(path).GetFiles("*.lic");
foreach (var file in files)
{
if (IsDataPROLicense(file.FullName)) { return file.FullName; }
}
if (0 >= subDirectoriesToCheck) { return null; }
subDirectoriesToCheck--;
var directories = new DirectoryInfo(path).GetDirectories();
foreach (var dir in directories)
{
var file = FindLicenseInPath(dir.FullName, subDirectoriesToCheck);
if (!string.IsNullOrWhiteSpace(file)) { return file; }
}
return null;
}
/// <summary>
/// copies license file from old installation to a new installation
/// </summary>
/// <param name="nextLowerVersion">next lowest version installed</param>
/// <param name="nextLowerPath">path to next lower version</param>
/// <param name="targetDir">the directory of the new install</param>
/// <param name="result">displayable string indicating results</param>
/// <returns>true if license file was copied, false otherwise</returns>
private static bool MigrateLicenseFile(string nextLowerVersion, string nextLowerPath, string targetDir, string setupExeDir, out string result)
{
try
{
var installVersionPath = FindLicenseInPath(new DirectoryInfo(setupExeDir).Parent.FullName, 2);
if (null != installVersionPath && File.Exists(installVersionPath))
{
var newPath = Path.Combine(targetDir, new FileInfo(installVersionPath).Name);
File.Copy(installVersionPath, newPath);
result = StringResources.InstallerLicenseFileFoundCopied;
return true;
}
var oldVersionPath = FindLicenseInPath(nextLowerPath, 2);
if (null != oldVersionPath && File.Exists(oldVersionPath))
{
var newPath = Path.Combine(targetDir, new FileInfo(oldVersionPath).Name);
File.Copy(oldVersionPath, newPath);
result = StringResources.OldLicenseFoundCopied;
return true;
}
result = StringResources.NoLicenseFound;
return false;
}
catch (Exception ex)
{
result = $"{StringResources.FailedToCopyLicense} {ex.Message}";
return false;
}
}
/// <summary>
/// Migrates the ApplicationSettings section of the config file
/// </summary>
/// <param name="nextLowerVersion">The DataPRO version of the old config file.</param>
/// <param name="nextLowerPath">The path to the old config file.</param>
/// <param name="targetDir">The path to the new config file.</param>
/// <param name="result">Text describing the success/failure of the config migration.</param>
/// <returns>True if migration succeeded or was not needed due to all defaults in the old config file, false if it failed.</returns>
private static bool MigrateAppSettings(string nextLowerVersion, string nextLowerPath, string targetDir, out string result)
{
return MigrateSettings(StringResources.ApplicationSettings, nextLowerVersion, nextLowerPath, targetDir, out result);
}
/// <summary>
/// If the old config file contains an element in the new config file, and it is different, copy it to the new config file.
/// </summary>
/// <param name="settingsType">Either UserSettings or ApplicationSettings.</param>
/// <param name="nextLowerVersion">The DataPRO version of the old config file.</param>
/// <param name="nextLowerPath">The path to the old config file.</param>
/// <param name="targetDir">The path to the new config file.</param>
/// <param name="result">Text describing the success/failure of the config migration.</param>
/// <returns>True if migration succeeded or was not needed due to all defaults in the old config file, false if it failed.</returns>
private static bool MigrateSettings(string settingsType, string nextLowerVersion, string nextLowerPath, string targetDir, out string result)
{
var oldSettings = new SettingElementCollection();
if (!GetOldSettings(settingsType, nextLowerPath, out result, out oldSettings))
{
return false;
}
else
{
var newSettings = new SettingElementCollection();
Configuration newConfig;
if (!ConfigInitializationHelper.GetNewSettings(settingsType, targetDir, out result, out newSettings, out newConfig))
{
return false;
}
else
{
SaveMigratedSettings(nextLowerVersion, oldSettings, newSettings, newConfig, out result);
return true;
}
}
}
/// <summary>
/// Gets the settings from the old config file
/// </summary>
/// <param name="settingsType">Either UserSettings or ApplicationSettings.</param>
/// <param name="nextLowerPath">The path to the old config file.</param>
/// <param name="result">Text describing the success/failure of the config migration.</param>
/// <param name="oldSettings">The settings from the old config file</param>
/// <returns>True if the settings were successfully found and processed, false if not.</returns>
private static bool GetOldSettings(string settingsType, string nextLowerPath,
out string result, out SettingElementCollection oldSettings)
{
result = string.Empty;
oldSettings = null;
Configuration oldConfig;
var oldPath = string.Empty;
try
{
//Open the config file from the most-recently installed version of DataPRO - this assumes that it was installed in the default folder!!!
oldPath = nextLowerPath + StringResources.RegistryDataPROExe;
oldConfig = ConfigurationManager.OpenExeConfiguration(@oldPath);
}
catch (System.Exception ex)
{
result = string.Format(StringResources.OldSettingsCouldNotBeFound, ex.Message, oldPath);
return false;
}
oldSettings = GetConfigSettings(settingsType, oldConfig);
if (oldSettings != null) return true;
result = StringResources.OldSettingsCouldNotBeProcessed;
return false;
}
/// <summary>
/// Update the new config file if needed
/// </summary>
/// <param name="nextLowerVersion">The highest version installed that is lower than this version</param>
/// <param name="oldSettings">The settings from the old config file</param>
/// <param name="newSettings">The settings from the new config file</param>
/// <param name="newConfig">The config being modified</param>
/// <param name="result">Text describing the success/failure of the config migration.</param>
/// <returns>True if the settings were successfully found and processed, false if not.</returns>
private static void SaveMigratedSettings(string nextLowerVersion, SettingElementCollection oldSettings, SettingElementCollection newSettings,
Configuration newConfig, out string result)
{
var oldSettingsDictionary = oldSettings.Cast<SettingElement>().ToDictionary(oldSetting => oldSetting.Name, oldSetting => oldSetting.Value.ValueXml.InnerXml);
var settingsToBeMigrated = new SettingElementCollection();
foreach (System.Configuration.SettingElement newSetting in newSettings)
{
//If this setting exists in the old config, and it is different than the default that was installed, migrate the value
if (oldSettingsDictionary.ContainsKey(newSetting.Name) &&
oldSettingsDictionary[newSetting.Name] != newSetting.Value.ValueXml.InnerXml)
{
//Only change from the new default DownloadFolder setting to the old DownloadFolder setting if it's not the previous default ("..\Data")
if (newSetting.Name != StringResources.DownloadFolder || oldSettingsDictionary[StringResources.DownloadFolder] != StringResources.DataUpOneLevel)
{
//Add to the list of settings that need to be migrated
settingsToBeMigrated.Add(newSetting);
}
}
}
foreach (System.Configuration.SettingElement settingToBeMigrated in settingsToBeMigrated)
{
//Migrate the changed value(s)
newSettings.Remove(settingToBeMigrated);
settingToBeMigrated.Value.ValueXml.InnerXml = oldSettingsDictionary[settingToBeMigrated.Name];
newSettings.Add(settingToBeMigrated);
}
newConfig.Save();
result = settingsToBeMigrated.Count <= 0 ? StringResources.ConfigDidNotNeedToBeUpdated : string.Format(StringResources.ConfigWasUpdated, nextLowerVersion);
}
/// <summary>
/// This allows you to change a config setting.
/// </summary>
/// <param name="targetDir">The path to the config file</param>
/// <param name="sectionGroupToFind">For example, "applicationSettings"</param>
/// <param name="sectionToFind">For example, "DataPROWin7.Properties.Settings"</param>
/// <param name="settingToFind">For example, "DownloadFolder"</param>
/// <param name="valueToSet">For example, "..\..\Data"</param>
/// <param name="result"></param>
/// <returns></returns>
private static bool ModifyConfigSetting(string targetDir, string sectionGroupToFind, string sectionToFind, string settingToFind, string valueToSet, out string result)
{
result = string.Empty;
try
{
//Open the new config file just installed
var newPath = Path.Combine(targetDir, StringResources.RegistryDataPROExe);
var newConfig = ConfigurationManager.OpenExeConfiguration(@newPath);
var settingFound = false;
var newConfigSectionGroup = newConfig.SectionGroups[sectionGroupToFind];
if (newConfigSectionGroup != null)
{
var applicationSettingsSection = (ClientSettingsSection)newConfigSectionGroup.Sections[sectionToFind];
var element = applicationSettingsSection.Settings.Get(settingToFind);
if (null != element)
{
settingFound = true;
applicationSettingsSection.Settings.Remove(element);
element.Value.ValueXml.InnerXml = valueToSet;
applicationSettingsSection.Settings.Add(element);
newConfig.Save();
}
}
if (!settingFound)
{
result = string.Format(StringResources.SettingNotFound, settingToFind);
return false;
}
}
catch (Exception ex)
{
result = ex.Message;
return false;
}
return true;
}
/// <summary>
/// Gets the settings in a section group of the config file.
/// </summary>
/// <param name="settingsType">Examples include "userSettings" and "applicationSettings"</param>
/// <param name="config">The config file to be interrogated.</param>
/// <returns>A collection of settings from the requested section of the config file.</returns>
private static SettingElementCollection GetConfigSettings(string settingsType, Configuration config)
{
var clientSettingsSection = new ClientSettingsSection();
var configurationSectionGroup = config.SectionGroups[settingsType];
if ((configurationSectionGroup != null) && (configurationSectionGroup.Sections[0] != null))
{
clientSettingsSection = configurationSectionGroup.Sections[0] as System.Configuration.ClientSettingsSection;
}
return clientSettingsSection?.Settings;
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("LocalSQLDB")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LocalSQLDB")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("0eca4183-1b37-41ac-8ccf-8b3a59d0a834")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,12 @@
<Window x:Class="OpenFolder.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:OpenFolder"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
</Grid>
</Window>

View File

@@ -0,0 +1,197 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{4C8891C6-24A7-47D8-8AAD-CEF2243A6202}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>DBConfiguration</RootNamespace>
<AssemblyName>DBConfiguration</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<SccProjectName>
</SccProjectName>
<SccLocalPath>
</SccLocalPath>
<SccAuxPath>
</SccAuxPath>
<SccProvider>
</SccProvider>
<TargetFrameworkProfile />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SQLite">
<HintPath>..\..\..\..\Common\DTS.Common\lib\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CommonUtilities.cs" />
<Compile Include="DBTypeChoice.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="DBTypeChoice.Designer.cs">
<DependentUpon>DBTypeChoice.cs</DependentUpon>
</Compile>
<Compile Include="DBConfig.cs" />
<Compile Include="MigrationStatus.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="DBTypeChoice.resx">
<DependentUpon>DBTypeChoice.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config">
<SubType>Designer</SubType>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Common\DTS.Common.Storage\DTS.Common.Storage.csproj">
<Project>{e3be457c-0ac7-4a9c-bc81-eafeb3217878}</Project>
<Name>DTS.Common.Storage</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Common\DTS.Common\DTS.Common.csproj">
<Project>{f7a0804f-61a4-40ae-83d0-f1137622b592}</Project>
<Name>DTS.Common</Name>
</ProjectReference>
<ProjectReference Include="..\..\DatabaseImporter\ConfigToDb\ConfigToDb.csproj">
<Project>{98a0afb3-7bbf-4e43-8c5b-552d69c8d3a9}</Project>
<Name>ConfigToDb</Name>
</ProjectReference>
<ProjectReference Include="..\..\DatabaseImporter\DatabaseImport\DatabaseImport.csproj">
<Project>{00b5442e-2279-47ae-8015-6db0ffeb6d88}</Project>
<Name>DatabaseImport</Name>
</ProjectReference>
<ProjectReference Include="..\..\PreviousDBVersions\Version57\DatabaseExport\DatabaseExport.csproj">
<Project>{0e52df76-b8a7-4c69-981c-cdc27b7ee5a9}</Project>
<Name>DatabaseExport</Name>
</ProjectReference>
<ProjectReference Include="..\Common\Installer.Common.csproj">
<Project>{7a025307-d06e-48ff-a443-dcd16530a6dd}</Project>
<Name>Installer.Common</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.5.2">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.5.2 %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>if not exist "db" mkdir "db"
copy /y "$(SolutionDir)\..\Common\DTS.Common.Storage\DataPRO.mdf" "db\DataPROBlank.mdf"
copy /y "$(SolutionDir)\..\Common\DTS.Common.Storage\DataPRO_log.ldf" "db\DataPROBlank_log.ldf"
call $(SolutionDir)RobocopyWrapper.bat "$(SolutionDir)\..\Common\DTS.Common.Storage" "db" "mdf"
call $(SolutionDir)RobocopyWrapper.bat "$(SolutionDir)\..\Common\DTS.Common.Storage" "db" "ldf"
if not exist "ISO" mkdir "ISO"
call $(SolutionDir)RobocopyWrapper.bat "$(SolutionDir)\..\Common\DTS.Common.ISO\DBFiles" "ISO" "mdb"
if not exist "SQL Server Scripts" mkdir "SQL Server Scripts"
call $(SolutionDir)RobocopyWrapper.bat "$(SolutionDir)\..\Common\DTS.Common.Storage" "SQL Server Scripts" "sql"
call $(SolutionDir)RobocopyWrapper.bat "$(SolutionDir)\..\Common\DTS.Common.Storage" "SQL Server Scripts" "bat"
copy /y "$(SolutionDir)\..\DataPRO\SQLiteInterop\$(Platform)\SQLite.Interop.dll"
</PostBuildEvent>
</PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,138 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Linq;
using System.Security.Principal;
using Microsoft.Win32;
using LocalSQLDB.Properties;
namespace LocalSQLDB
{
public class LocalDBPrepare
{
public LocalDBPrepare(string targetDir, Version productVersion)
{
_targetDir = targetDir;
_installingVersion = productVersion;
}
static string _targetDir = string.Empty;
static Version _installingVersion = new Version();
private Configuration _newConfig;
private SettingElementCollection _newSettings = new SettingElementCollection();
private Dictionary<string, string> _newSettingsDictionary = new Dictionary<string, string>();
private enum DbType
{
Centralized = 0,
Local = 1
}
private enum ConfigSettings
{
DBType,
LocalDbHost,
DBName,
UseNTLMAuthentication,
LocalDBUser,
LocalDBPassword
}
public bool PrepareDB()
{
//Only attach to SqlLocalDb if DataPRO will be using a local (not centralized) database
GetNewConfig();
var dbType = DbType.Local;
try
{
DbType intDbType;
if (Enum.TryParse(_newSettingsDictionary[ConfigSettings.DBType.ToString()], out intDbType))
{
switch (intDbType)
{
case DbType.Centralized:
dbType = DbType.Centralized;
break;
case DbType.Local:
default:
dbType = DbType.Local;
break;
}
}
else
{
dbType = DbType.Local;
}
}
catch
{
dbType = DbType.Local;
}
if (dbType == DbType.Centralized)
{
return false;
}
var dbName = Settings.Default.DataPRO;
try { dbName = _newSettingsDictionary[ConfigSettings.DBName.ToString()]; }
catch { dbName = Settings.Default.DataPRO; }
if (string.Equals(dbName, Settings.Default.DataPRO, StringComparison.CurrentCultureIgnoreCase)) return true;
var dbFileName = System.IO.Path.Combine(_targetDir, Settings.Default.LocalDbFolder, dbName + Settings.Default.Mdf);
var dbFileLogName = System.IO.Path.Combine(_targetDir, Settings.Default.LocalDbFolder, dbName + Settings.Default.LogLdf);
var sourceFileName = string.Empty;
//if (_newSettingsDictionary[ConfigSettings.DBCopy.ToString()])
//{
string mostRecentlyInstalledLowerVersion;
var mostRecentlyInstalledSubKeyName = Common.PreviousInstall.GetMostRecentlyInstalledSubKeyName(_installingVersion, out mostRecentlyInstalledLowerVersion);
if (mostRecentlyInstalledSubKeyName == string.Empty) return false;
//if (_newSettingsDictionary[ConfigSettings.DBCopy.ToString()])
//{
var _previousDir = Common.PreviousInstall.GetMostRecentlyInstalledPath(mostRecentlyInstalledSubKeyName);
sourceFileName = System.IO.Path.Combine(_previousDir, Settings.Default.LocalDbFolder, Settings.Default.DataPRO + Settings.Default.Mdf);
//}
//else
//{
sourceFileName = System.IO.Path.Combine(_targetDir, Settings.Default.LocalDbFolder, Settings.Default.DataPRO + Settings.Default.Mdf);
//}
System.IO.File.Copy(sourceFileName, dbFileName);
//System.IO.File.Delete(sourceFileName);
//if (_newSettingsDictionary[ConfigSettings.DBCopy.ToString()])
//{
// sourceFileName = System.IO.Path.Combine(_previousDir, Settings.Default.LocalDbFolder, Settings.Default.DataPRO + Settings.Default.LogLdf);
//}
//else
//{
sourceFileName = System.IO.Path.Combine(_targetDir, Settings.Default.LocalDbFolder, Settings.Default.DataPRO + Settings.Default.LogLdf);
//}
System.IO.File.Copy(sourceFileName, dbFileLogName);
//System.IO.File.Delete(sourceFileName);
return true;
}
private void GetNewConfig()
{
var newPath = string.Empty;
//Open the new config file just installed
newPath = _targetDir + Settings.Default.RegistryDataPROExe;
_newConfig = ConfigurationManager.OpenExeConfiguration(@newPath);
_newSettings = GetConfigApplicationSettings();
_newSettingsDictionary = _newSettings.Cast<SettingElement>().ToDictionary(newSetting => newSetting.Name, newSetting => newSetting.Value.ValueXml.InnerXml);
}
private SettingElementCollection GetConfigApplicationSettings()
{
var configurationSectionGroup = _newConfig.SectionGroups[Settings.Default.ApplicationSettings];
if (configurationSectionGroup == null) return null;
var clientSettingsSection = configurationSectionGroup.Sections[0] as System.Configuration.ClientSettingsSection;
return clientSettingsSection != null ? clientSettingsSection.Settings : null;
}
}
}

View File

@@ -0,0 +1,114 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{8620652F-F86E-466A-8D7B-D3088A7B0C05}</ProjectGuid>
<OutputType>WinExe</OutputType>
<RootNamespace>RegAddProductCode</RootNamespace>
<AssemblyName>RegAddProductCode</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AddProductCode.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.5.2">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.5.2 %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,108 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{BECADDA8-F3F3-4921-AE40-D34217B83B3D}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>OpenFolder</RootNamespace>
<AssemblyName>OpenFolder</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
</ItemGroup>
<ItemGroup>
<Compile Include="Folder.cs" />
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Common\DTS.Common\DTS.Common.csproj">
<Project>{f7a0804f-61a4-40ae-83d0-f1137622b592}</Project>
<Name>DTS.Common</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,477 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="DBConfiguration.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
<applicationSettings>
<DBConfiguration.Properties.Settings>
<setting name="RegistryDataPROExe" serializeAs="String">
<value>DataPRO.exe</value>
</setting>
<setting name="ApplicationSettings" serializeAs="String">
<value>applicationSettings</value>
</setting>
<setting name="DataPRO" serializeAs="String">
<value>DataPRO</value>
</setting>
<setting name="LocalDbFolder" serializeAs="String">
<value>db</value>
</setting>
<setting name="Mdf" serializeAs="String">
<value>.mdf</value>
</setting>
<setting name="LogLdf" serializeAs="String">
<value>_log.ldf</value>
</setting>
<setting name="SqlLocalDBExe" serializeAs="String">
<value>SqlLocalDB.exe</value>
</setting>
<setting name="StopDataProInstance" serializeAs="String">
<value>stop DataPROInstance</value>
</setting>
<setting name="DeleteDataProInstance" serializeAs="String">
<value>delete DataPROInstance</value>
</setting>
<setting name="CreateAndStartDataProInstance" serializeAs="String">
<value>create DataPROInstance -s</value>
</setting>
<setting name="RegistrySoftwareMicrosoftMicrosoftSQLServerLocalDBInstalledVersions" serializeAs="String">
<value>SOFTWARE\\Microsoft\\Microsoft SQL Server Local DB\\Installed Versions</value>
</setting>
<setting name="InstanceAPIPath" serializeAs="String">
<value>InstanceAPIPath</value>
</setting>
<setting name="SqlUserInstanceDll" serializeAs="String">
<value>SqlUserInstance.dll</value>
</setting>
<setting name="LocalDB" serializeAs="String">
<value>LocalDB</value>
</setting>
<setting name="Tools" serializeAs="String">
<value>Tools</value>
</setting>
<setting name="ScriptsFolder" serializeAs="String">
<value>SQL Server Scripts</value>
</setting>
<setting name="AttachDBsbat" serializeAs="String">
<value>AttachDBs.bat</value>
</setting>
<setting name="InstallerDatabaseAttach_Status" serializeAs="String">
<value>Database Attach Status</value>
</setting>
<setting name="InstallerDatabaseAttach_SqlServerLocalDbNotInstalled" serializeAs="String">
<value>SQL Server LocalDb is not installed.</value>
</setting>
<setting name="InstallerDatabaseAttach_Success" serializeAs="String">
<value>Databases were successfully attached to (localdb)\DataPROInstance.</value>
</setting>
<setting name="Versions" serializeAs="String">
<value>versions</value>
</setting>
<setting name="ISO" serializeAs="String">
<value>ISO</value>
</setting>
<setting name="CreateDataProInstance" serializeAs="String">
<value>create DataPROInstance</value>
</setting>
<setting name="StartDataProInstance" serializeAs="String">
<value>start DataPROInstance</value>
</setting>
<setting name="DataPROInstallationCompletedSuccessfully" serializeAs="String">
<value>DataPRO installation completed successfully</value>
</setting>
<setting name="InstallationStatus" serializeAs="String">
<value>DataPRO Installation status</value>
</setting>
<setting name="SqlServerLocalDbNotInstalled" serializeAs="String">
<value>SQL Server LocalDb is not installed.</value>
</setting>
<setting name="InstallRedistributablesbat" serializeAs="String">
<value>InstallRedistributables.bat</value>
</setting>
<setting name="ShareDataProInstance" serializeAs="String">
<value>share DataPROInstance DataPROInstanceShared</value>
</setting>
<setting name="Db" serializeAs="String">
<value>.db</value>
</setting>
<setting name="LocalDbDataPROInstance" serializeAs="String">
<value>(localdb)\DataPROInstance</value>
</setting>
<setting name="DatabaseMigrationRequired" serializeAs="String">
<value>Database migration is required. This may take awhile.{0}Click OK to export data from previous database, or Cancel to postpone the update (this will require using the previous version of DataPRO until the update is completed manually at a more convenient time).</value>
</setting>
<setting name="Warning" serializeAs="String">
<value>Warning</value>
</setting>
<setting name="ActionRequired" serializeAs="String">
<value>Action required</value>
</setting>
<setting name="AttachEmptyDbOnCentralServer" serializeAs="String">
<value>An empty DataPROPre20 database must be attached on your central server.{0}Copy DataPROPre20.mdf and DataPROPre20_log.ldf from C:\DTS\DTS.Suite\&lt;version&gt;\DataPRO\db to your centralized server, and attach it.{0}Click OK when done or Cancel to continue using previous version of DataPRO.</value>
</setting>
<setting name="DatabaseImportCancelled" serializeAs="String">
<value>Database import was cancelled.{0}Previous version of DataPRO must be used (or blank local database may be used).</value>
</setting>
<setting name="DatabaseMigrationCancelled" serializeAs="String">
<value>Database migration was cancelled.{0}Previous version of DataPRO must be used (or blank local database may be used).</value>
</setting>
<setting name="DatabaseCopied" serializeAs="String">
<value>Database was successfully copied.</value>
</setting>
<setting name="Success" serializeAs="String">
<value>Success</value>
</setting>
<setting name="LocalDatabaseMigrationFailed" serializeAs="String">
<value>Local database migration has failed.{0}{0}The previous version of DataPRO must be used or this version can be used with its blank database.{0}{0}Please contact DTS Support.{0}{0}{1}{2}</value>
</setting>
<setting name="ImportChoice" serializeAs="String">
<value>The data from the previous version of DataPRO has been exported to {0}.{1}Importing this data into the new DataPRO database could take up to twice as long as the export just did.{1}Click OK to finish the migration, or Cancel to postpone the update (this will require using the previous version of DataPRO until the update is completed manually at a more convenient time).</value>
</setting>
<setting name="DatabaseVersionError" serializeAs="String">
<value>An error occurred while attempting to determine the previous database version. Database was not copied.{0}Please contact DTS support.</value>
</setting>
<setting name="DatabaseNotCopied" serializeAs="String">
<value>Database copy prior to migration has failed.{0}Previous version of DataPRO must be used. Please contact DTS Support.</value>
</setting>
<setting name="Pre20" serializeAs="String">
<value>Pre20</value>
</setting>
<setting name="DatabaseSwitchInstructions" serializeAs="String">
<value>The following steps are required and can be found in more detail in the DataPRO manual:{0}1) Backup the DataPRO database as DatePROPre20;{1}2) Detach the DataPRO database;{1}3) Restore the backup as DataPROPre20;{1}4) Copy DataPRO.mdf and DataPRO_log.ldf from C:\DTS\DTS.Suite\&lt;version&gt;\DataPRO\db to server;{1}5) Attach DataPRO database.{0}Click OK when all steps have been completed.</value>
</setting>
<setting name="DatabaseSwitchingRequired" serializeAs="String">
<value>Database migration is required.{0}This requires the following steps which can be found in more detail in the DataPRO manual:{0}1) Backup the centralized DataPRO database,{1}2) Detach the centralized DataPRO database,{1}3) Restore from the backup as DataPROPre20,{1}4) Copy DataPRO.mdf and DataPRO_log.ldf from C:\DTS\DTS.Suite\&lt;version&gt;\DataPRO\db,{1} 5) Attach DataPRO database.{0}Click OK to migrate the previous database, or Cancel to postpone the update (this will require using the previous version of DataPRO until the update is completed manually at a more convenient time).</value>
</setting>
<setting name="DetachDBsbat" serializeAs="String">
<value>DetachDBs.bat</value>
</setting>
<setting name="DataPROSQLFolder" serializeAs="String">
<value>DataPRO_SQL</value>
</setting>
<setting name="AttachDataPROPre20Remotebat" serializeAs="String">
<value>Attach_DataPROPre20_RemoteDB.bat</value>
</setting>
<setting name="SQLServerScriptsFolder" serializeAs="String">
<value>SQL Server Scripts</value>
</setting>
<setting name="AttachDataPRORemotebat" serializeAs="String">
<value>Attach_DataPRO_RemoteDB.bat</value>
</setting>
<setting name="AttachISORemotebat" serializeAs="String">
<value>Attach_ISO_RemoteDB.bat</value>
</setting>
<setting name="DetachRemoteDBbat" serializeAs="String">
<value>Detach_RemoteDB.bat</value>
</setting>
<setting name="BackupAlterDetachbat" serializeAs="String">
<value>Backup_Alter_Detach_RemoteDBs.bat</value>
</setting>
<setting name="RestoreAsDataPROPre20bat" serializeAs="String">
<value>Restore_As_DataPROPre20_RemoteDB.bat</value>
</setting>
<setting name="BackupBak" serializeAs="String">
<value>Backup.bak</value>
</setting>
<setting name="CentralizedDatabaseMigrationFailed" serializeAs="String">
<value>Database migration has failed.{0}{0}The previous version of DataPRO must be used with the previous database or this version can be used with a blank local database.{0}{0}Please contact DTS Support.{0}{0}{1}{2}</value>
</setting>
<setting name="Initial" serializeAs="String">
<value>Initial</value>
</setting>
<setting name="Backupbat" serializeAs="String">
<value>Backup_RemoteDB.bat</value>
</setting>
<setting name="NetworkError" serializeAs="String">
<value>Network error! {0}; Click 'OK' to retry or 'Abort' to terminate database setup.</value>
</setting>
<setting name="AccessError" serializeAs="String">
<value>Access error: {0}</value>
</setting>
<setting name="AccessRetry" serializeAs="String">
<value>To retry database migration, give this user Administrator privileges on the server and click 'OK'.</value>
</setting>
<setting name="DataPROInstallationCancelled" serializeAs="String">
<value>DataPRO installation was cancelled by user</value>
</setting>
<setting name="PreviousDatabaseNotCopied" serializeAs="String">
<value>Source database was not copied: </value>
</setting>
<setting name="ConfirmAbort" serializeAs="String">
<value>Are you sure you want to discontinue?</value>
</setting>
<setting name="DatabaseMigrationCompletedSuccessfully" serializeAs="String">
<value>Database migration completed successfully</value>
</setting>
<setting name="DatabaseStandAloneMigrationCancelled" serializeAs="String">
<value>Database migration was cancelled</value>
</setting>
<setting name="InstallerCustomActions" serializeAs="String">
<value>InstallerCustomActions</value>
</setting>
<setting name="ISOMMEDbLocation" serializeAs="String">
<value>ISO\mme_code.mdb</value>
</setting>
<setting name="SourceDbSameAsDestination" serializeAs="String">
<value>Source database is same as destination</value>
</setting>
<setting name="BlankDestinationDb" serializeAs="String">
<value>Destination database is blank and not allowed to be overwritten</value>
</setting>
<setting name="DataPROBlankMdf" serializeAs="String">
<value>DataPROBlank.mdf</value>
</setting>
<setting name="InvalidSourceDb" serializeAs="String">
<value>Invalid source database name</value>
</setting>
<setting name="LocalSourceDbToBeMigrated" serializeAs="String">
<value>Local source database to be migrated</value>
</setting>
<setting name="LocalSourceDbToBeMigratedVersion" serializeAs="String">
<value>Local source database to be migrated (Version {0})</value>
</setting>
<setting name="InvalidSourceDbVersion" serializeAs="String">
<value>Invalid source database version</value>
</setting>
<setting name="DbVersionsAreTheSame" serializeAs="String">
<value>Database versions are the same</value>
</setting>
<setting name="SourceDbVersionCannotBeGreaterThanDestination" serializeAs="String">
<value>Source database version cannot be greater than destination</value>
</setting>
<setting name="NetworkPathNotFound" serializeAs="String">
<value>The network path was not found</value>
</setting>
<setting name="ExceptionWhileUsingPrevDbStructure" serializeAs="String">
<value>Exception while using previous database structure: {0}</value>
</setting>
<setting name="ResultOnCentralServer" serializeAs="String">
<value>Result of querying tblDataPRODbVersion on central server is {0}</value>
</setting>
<setting name="ResultOnLocal" serializeAs="String">
<value>Result of querying tblDataPRODbVersion locally is {0}</value>
</setting>
<setting name="MigratingTempCentralizedDb" serializeAs="String">
<value>Migrating temporary centralized database from version {0} to {1}...</value>
</setting>
<setting name="DetachingTempLocalDb" serializeAs="String">
<value>Detaching temporary local database...</value>
</setting>
<setting name="MigratingTempLocalDb" serializeAs="String">
<value>Migrating temporary local database from version {0} to {1}...</value>
</setting>
<setting name="AttachingBlankDb" serializeAs="String">
<value>Attaching blank current database for migration...</value>
</setting>
<setting name="CopyingDataPRODb" serializeAs="String">
<value>Copying DataPRO database as {0}...</value>
</setting>
<setting name="WasCopied" serializeAs="String">
<value>{0} was copied as {1}</value>
</setting>
<setting name="AttachingRemoteISODb" serializeAs="String">
<value>Attaching remote ISO database...</value>
</setting>
<setting name="DeletingRemoteISOLog" serializeAs="String">
<value>Deleting remote ISO_log.ldf...</value>
</setting>
<setting name="CopyingISOToRemote" serializeAs="String">
<value>Copying newly-installed ISO.mdf to remote server...</value>
</setting>
<setting name="AttachingRemoteDb" serializeAs="String">
<value>Attaching remote {0} database...</value>
</setting>
<setting name="DeletingRemoteLog" serializeAs="String">
<value>Deleting remote {0}_Log.ldf..."</value>
</setting>
<setting name="CopyingNewDataPROMdfToRemote" serializeAs="String">
<value>Copying newly-installed DataPRO.mdf to remote server...</value>
</setting>
<setting name="AttachingRemotePre20Db" serializeAs="String">
<value>Attaching remote {0}Pre20 database...</value>
</setting>
<setting name="DeletingRemotePre20Log" serializeAs="String">
<value>Deleting remote {0}Pre20_Log.ldf...</value>
</setting>
<setting name="CopyingNewDataPROPre20MdfToRemote" serializeAs="String">
<value>Copying newly-installed DataPROPre20.mdf to remote server...</value>
</setting>
<setting name="MigratingPrevCentralizedDb" serializeAs="String">
<value>Migrating previous centralized database from version {0} to {1}...</value>
</setting>
<setting name="BackingUpRemoteDb" serializeAs="String">
<value>Backing up remote {0} database...</value>
</setting>
<setting name="DeletingRemoteDataPROBackupBak" serializeAs="String">
<value>Deleting remote DataPROBackup.bak...</value>
</setting>
<setting name="DetachingRemoteTempPre20Db" serializeAs="String">
<value>Detaching remote temporary {0}Pre20 database...</value>
</setting>
<setting name="MigratingPrevCentralizedDbToIntermediate" serializeAs="String">
<value>Migrating previous centralized database from version {0} to intermediate version {1}...</value>
</setting>
<setting name="RestoringRemoteDataPROAsPre20" serializeAs="String">
<value>Restoring remote DataPRO database as DataPROPre20...</value>
</setting>
<setting name="DeletingRemotePre20Mdf" serializeAs="String">
<value>Deleting remote {0}Pre20.mdf...</value>
</setting>
<setting name="BackingUpAlteringDetachingRemoteDbAndISO" serializeAs="String">
<value>Backing up, Altering, and Detaching remote {0} and ISO database...</value>
</setting>
<setting name="DeletingRemoteBackupBak" serializeAs="String">
<value>Deleting remote {0}Backup.bak ...</value>
</setting>
<setting name="BackingUpAlteringDetachingRemoteDb" serializeAs="String">
<value>Backing up, Altering, and Detaching remote {0} database...</value>
</setting>
<setting name="ImportingToNewCentralizedDb" serializeAs="String">
<value>Importing to new centralized database from {0}...</value>
</setting>
<setting name="ExportingPrevDb" serializeAs="String">
<value>Exporting previous database to {0}...</value>
</setting>
<setting name="MigratingPrevCentralizedDbFromVersion" serializeAs="String">
<value>Migrating previous centralized database from version {0}</value>
</setting>
<setting name="QueryingCentralizedDbVersion" serializeAs="String">
<value>Querying centralized database version...</value>
</setting>
<setting name="CopyingPrevLocalDbNoMigration" serializeAs="String">
<value>Copying previous local database; no migration is required...</value>
</setting>
<setting name="DetachingLocalISODb" serializeAs="String">
<value>Detaching local ISO database...</value>
</setting>
<setting name="MigratingPrevLocalDb" serializeAs="String">
<value>Migrating previous local database from version {0} to {1}...</value>
</setting>
<setting name="AttachingPrevLocalDb" serializeAs="String">
<value>Attaching copy of local source database...</value>
</setting>
<setting name="CopyingPrevLocalDb" serializeAs="String">
<value>Copying local source database...</value>
</setting>
<setting name="TempAttachingCopyPrevLocalDb" serializeAs="String">
<value>Temporarily attaching copy of local source database...</value>
</setting>
<setting name="ImportingToTempLocalDb" serializeAs="String">
<value>Importing to temporary local database from {0}...</value>
</setting>
<setting name="AttachingBlankLocalTempDb" serializeAs="String">
<value>Attaching new blank local temporary database for import from {0}...</value>
</setting>
<setting name="QueryingPrevLocalDbVersion" serializeAs="String">
<value>Querying local source database version...</value>
</setting>
<setting name="DataPROBlankLogLdf" serializeAs="String">
<value>DataPROBlank_log.ldf</value>
</setting>
<setting name="InvalidDestinationDb" serializeAs="String">
<value>Invalid destination database path</value>
</setting>
<setting name="DestinationPathIsNotAllowed" serializeAs="String">
<value>Destination database cannot be created in working directory</value>
</setting>
<setting name="Migrate" serializeAs="String">
<value>Migrate</value>
</setting>
<setting name="LocalDestDbPath" serializeAs="String">
<value>Local destination database path (Version will be {0})</value>
</setting>
<setting name="Quit" serializeAs="String">
<value>Quit</value>
</setting>
<setting name="WarningAllowStreamingModesWasNotMigrated" serializeAs="String">
<value>Warning: The AllowStreaming config setting was not migrated and has been set to False.{0}{0}An "Allow streaming modes" checkbox is now in the "Test setup settings" step of the "System Settings" tab.</value>
</setting>
<setting name="Initialize" serializeAs="String">
<value>Initialize</value>
</setting>
<setting name="LocalSourceDbToBeInitialized" serializeAs="String">
<value>Local source database to be initialized</value>
</setting>
<setting name="LocalDestDbToBeInitializedPath" serializeAs="String">
<value>Local destination database path</value>
</setting>
<setting name="DatabaseInitializationCompletedSuccessfully" serializeAs="String">
<value>Database initialization completed successfully</value>
</setting>
<setting name="DatabaseStandAloneInitializationCancelled" serializeAs="String">
<value>Database initialization was cancelled</value>
</setting>
<setting name="DatabaseInitializationVersionError" serializeAs="String">
<value>Invalid database version. Database initialization was not done.</value>
</setting>
<setting name="CreatingBackupDb" serializeAs="String">
<value>Creating a backup database...</value>
</setting>
<setting name="DetachingLocalMigratedDb" serializeAs="String">
<value>Detaching local {0} database...</value>
</setting>
<setting name="CentralizedDatabaseShouldBeBackedUp" serializeAs="String">
<value>Before proceeding with database migration, ensure that all data has been backed up. {0}</value>
</setting>
<setting name="CentralizedDatabaseMigrationCancelled" serializeAs="String">
<value>Database migration has been cancelled.</value>
</setting>
<setting name="DisplayDatabaseVersion" serializeAs="String">
<value>Database is version {0}</value>
</setting>
<setting name="NoMigrationNeeded" serializeAs="String">
<value>No migration was done.{0}Old db version: {1}; New db version: {2}</value>
</setting>
<setting name="InitializingDb" serializeAs="String">
<value>Initializing local database to be {0}-centric{1}...</value>
</setting>
<setting name="Aero" serializeAs="String">
<value>Aero</value>
</setting>
<setting name="Crash" serializeAs="String">
<value>Crash</value>
</setting>
<setting name="TSRAIR" serializeAs="String">
<value>TSR AIR</value>
</setting>
<setting name="ThirtySeconds" serializeAs="String">
<value> (this may take up to 30 seconds)</value>
</setting>
<setting name="DownloadFolder" serializeAs="String">
<value>DownloadFolder</value>
</setting>
<setting name="DataUpOneLevel" serializeAs="String">
<value>..\Data</value>
</setting>
<setting name="ConfigDidNotNeedToBeUpdated" serializeAs="String">
<value>DataPRO.exe.config did not need to be updated.</value>
</setting>
<setting name="ConfigWasUpdated" serializeAs="String">
<value>DataPRO.exe.config was updated from the {0} installation.</value>
</setting>
<setting name="UserSettings" serializeAs="String">
<value>userSettings</value>
</setting>
<setting name="Setting" serializeAs="String">
<value>DataPRO.exe</value>
</setting>
<setting name="NewSettingsCouldNotBeFound" serializeAs="String">
<value>Warning: DataPRO.exe.config was not updated because config settings from new version of DataPRO could not be found: {0}; {1}</value>
</setting>
<setting name="NewSettingsCouldNotBeProcessed" serializeAs="String">
<value>Warning: DataPRO.exe.config was not updated because config settings from new version of DataPRO could not be processed.</value>
</setting>
<setting name="ConfigMigrationStatus" serializeAs="String">
<value>Config migration status</value>
</setting>
<setting name="TSRAIRGoInstallationCompletedSuccessfully" serializeAs="String">
<value>TSR AIR Go installation completed successfully</value>
</setting>
</DBConfiguration.Properties.Settings>
</applicationSettings>
</configuration>

View File

@@ -0,0 +1,111 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{E90D88BC-D224-4E2B-BAEB-DA6057E98ABF}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>WarnWindows11</RootNamespace>
<AssemblyName>WarnWindows11</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<WarningLevel>4</WarningLevel>
<AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>x64</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<LangVersion>7.3</LangVersion>
<ErrorReport>prompt</ErrorReport>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xaml">
<RequiredTargetFramework>4.0</RequiredTargetFramework>
</Reference>
<Reference Include="WindowsBase" />
<Reference Include="PresentationCore" />
<Reference Include="PresentationFramework" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType>
</Compile>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
<Compile Include="WarnWindows11.cs" />
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Common\DTS.Common\DTS.Common.csproj">
<Project>{f7a0804f-61a4-40ae-83d0-f1137622b592}</Project>
<Name>DTS.Common</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="InstallerMigrateConfig_ConfigDidNotNeedToBeUpdated" xml:space="preserve">
<value>DataPRO.exe.config no necesita actualizarse.</value>
</data>
<data name="InstallerMigrateConfig_ConfigDidNotNeedToBeUpdatedBecausePreviousWasNotFound" xml:space="preserve">
<value>DataPRO.exe.config no necesita actualizarse porque no se encontró una versión previamente instalada de DataPRO.</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseNewSettingsCouldNotBeFound" xml:space="preserve">
<value>Advertencia: DataPRO.exe.config no se actualizó porque no se pudo encontrar la configuración de configuración de la nueva versión de DataPRO: {0}; {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseNewSettingsCouldNotBeProcessed" xml:space="preserve">
<value>Advertencia: DataPRO.exe.config no se actualizó porque no se pudo encontrar la configuración de configuración de la nueva versión de DataPRO: {0}; {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseOldSettingsCouldNotBeFound" xml:space="preserve">
<value>Advertencia: DataPRO.exe.config no se actualizó porque no se pudo encontrar los valores de configuración de la versión instalada anteriormente de DataPRO: {0}; {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseOldSettingsCouldNotBeProcessed" xml:space="preserve">
<value>Advertencia: DataPRO.exe.config no se actualizó porque no se podrían procesar los valores de configuración de la versión instalada anteriormente de DataPRO.</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasUpdatedFromTheMostRecentlyInstalledVersionInstallation" xml:space="preserve">
<value>DataPRO.exe.config se actualizó desde la instalación {0}.</value>
</data>
</root>

View File

@@ -0,0 +1,101 @@
using System;
using Common.Properties;
using Microsoft.Win32;
namespace Installer.Common
{
public static class PreviousInstall
{
public static string GetMostRecentlyInstalledSubKeyName(Version installingVersion, out string mostRecentlyInstalledLowerVersion)
{
mostRecentlyInstalledLowerVersion = string.Empty;
var mostRecentlyInstalledSubKeyName = string.Empty;
var rk = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
var sk1 = rk.OpenSubKey(Settings.Default.RegistrySoftwareInstalledProducts);
var maxProductVersion = new Version(0, 0, 0);
if (sk1 == null) return string.Empty;
foreach (var productSubKeyName in sk1.GetSubKeyNames())
{
var newKey = sk1.OpenSubKey(productSubKeyName);
if (newKey == null) continue;
var newSubKey = newKey.OpenSubKey(Settings.Default.RegistryInstallProperties);
if (newSubKey == null) continue;
var val = newSubKey.GetValue(Settings.Default.RegistryDisplayName, -1, RegistryValueOptions.None).ToString();
if ((val == "-1") || (val != Settings.Default.RegistryDataPRO)) continue;
var strThisVersion = newSubKey.GetValue(Settings.Default.RegistryDisplayVersion, -1, RegistryValueOptions.None).ToString();
var thisVersion = new Version(strThisVersion);
if (thisVersion.IsGreaterThan(maxProductVersion) && thisVersion.IsLessThan(installingVersion))
{
maxProductVersion = thisVersion;
mostRecentlyInstalledLowerVersion = thisVersion.ToString();
mostRecentlyInstalledSubKeyName = productSubKeyName;
}
}
return mostRecentlyInstalledSubKeyName;
}
public static bool IsGreaterThan(this Version leftString, Version rightString)
{
return leftString.CompareTo(rightString) > 0;
}
public static bool IsLessThan(this Version leftString, Version rightString)
{
return leftString.CompareTo(rightString) < 0;
}
public static string GetMostRecentlyInstalledPath(string mostRecentlyInstalledSubKeyName)
{
var log = new System.Diagnostics.EventLog();
log.Source = "DataPROInstaller";
var mostRecentlyInstalledPath = string.Empty;
var rk = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
//Look first in Products
var sk1 = rk.OpenSubKey(Settings.Default.RegistrySoftwareInstalledProducts);
if (sk1 != null)
{
log.WriteEntry("Looking in Products");
foreach (var productSubKeyName in sk1.GetSubKeyNames())
{
if (productSubKeyName != mostRecentlyInstalledSubKeyName) continue;
var newKey = sk1.OpenSubKey(productSubKeyName);
if (newKey == null) continue;
newKey = newKey.OpenSubKey(Settings.Default.RegistryInstallProperties);
if (newKey == null) continue;
var val = newKey.GetValue(Settings.Default.RegistryInstallLocation, -1, RegistryValueOptions.None).ToString();
if ((val == "-1") || (string.IsNullOrWhiteSpace(val))) continue;
mostRecentlyInstalledPath = val;
if (mostRecentlyInstalledPath.Contains(Settings.Default.DTSSuite))
{
mostRecentlyInstalledPath += Settings.Default.RegistryDataPRO + "\\";
}
log.WriteEntry("GetMostRecentlyInstalledPath returned " + mostRecentlyInstalledPath + " from Products");
return mostRecentlyInstalledPath;
}
}
//Look in Components
log.WriteEntry("Looking in Components");
sk1 = rk.OpenSubKey(Settings.Default.RegistrySoftwareInstalledComponents);
if (sk1 == null) return string.Empty;
foreach (var productSubKeyName in sk1.GetSubKeyNames())
{
var newKey = sk1.OpenSubKey(productSubKeyName);
if (newKey == null) continue;
var val = newKey.GetValue(mostRecentlyInstalledSubKeyName, -1, RegistryValueOptions.None).ToString();
if ((val == "-1") || (!val.EndsWith(Settings.Default.RegistryDataPROExeConfig))) continue;
mostRecentlyInstalledPath = val.Substring(0, val.Length - Settings.Default.RegistryDataPROExeConfig.Length);
if (mostRecentlyInstalledPath.Contains(Settings.Default.DTSSuite))
{
mostRecentlyInstalledPath += Settings.Default.RegistryDataPRO + "\\";
}
log.WriteEntry("GetMostRecentlyInstalledPath returned " + mostRecentlyInstalledPath + " from Components");
return mostRecentlyInstalledPath;
}
log.WriteEntry("GetMostRecentlyInstalledPath returned " + mostRecentlyInstalledPath);
return mostRecentlyInstalledPath;
}
}
}

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="InstallerMigrateConfig_ConfigDidNotNeedToBeUpdated" xml:space="preserve">
<value>DataPRO.exe.config n'a pas besoin d'être mis à jour.</value>
</data>
<data name="InstallerMigrateConfig_ConfigDidNotNeedToBeUpdatedBecausePreviousWasNotFound" xml:space="preserve">
<value>DataPRO.exe.config n'a pas besoin d'être mis à jour car une version précédemment installée de DataPRO n'a pas été trouvée.</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseNewSettingsCouldNotBeFound" xml:space="preserve">
<value>Avertissement: DataPRO.exe.config n'a pas été mis à jour car les paramètres de configuration de la nouvelle version de DataPRO n'ont pas pu être trouvés: {0}; {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseNewSettingsCouldNotBeProcessed" xml:space="preserve">
<value>Avertissement: DataPRO.exe.config n'a pas été mis à jour car les paramètres de configuration de la nouvelle version de DataPRO n'ont pas pu être trouvés: {0}; {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseOldSettingsCouldNotBeFound" xml:space="preserve">
<value>Avertissement: DataPRO.exe.config n'a pas été mis à jour car les paramètres de configuration de la version précédemment installée de DataPRO n'ont pas pu être trouvés: {0}; {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseOldSettingsCouldNotBeProcessed" xml:space="preserve">
<value>Avertissement: DataPRO.exe.config n'a pas été mis à jour car les paramètres de configuration de la version précédemment installée de DataPRO n'ont pas pu être traités.</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasUpdatedFromTheMostRecentlyInstalledVersionInstallation" xml:space="preserve">
<value>DataPRO.exe.config a été mis à jour à partir de l'installation {0}.</value>
</data>
</root>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="InstallerMigrateConfig_ConfigDidNotNeedToBeUpdated" xml:space="preserve">
<value>DataPRO.exe.config musste nicht aktualisiert werden.</value>
</data>
<data name="InstallerMigrateConfig_ConfigDidNotNeedToBeUpdatedBecausePreviousWasNotFound" xml:space="preserve">
<value>DataPRO.exe.config musste nicht aktualisiert werden, da eine zuvor installierte Version von DataPRO nicht gefunden wurde.</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseNewSettingsCouldNotBeFound" xml:space="preserve">
<value>Warnung: DataPRO.exe.config wurde nicht aktualisiert, da config-Einstellungen aus der neuen Version von DataPRO nicht gefunden werden konnten: {0}; {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseNewSettingsCouldNotBeProcessed" xml:space="preserve">
<value>Warnung: DataPRO.exe.config wurde nicht aktualisiert, da config-Einstellungen aus der neuen Version von DataPRO nicht gefunden werden konnten: {0}; {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseOldSettingsCouldNotBeFound" xml:space="preserve">
<value>Warnung: DataPRO.exe.config wurde nicht aktualisiert, da Konfigurationseinstellungen von zuvor installierter Version von DataPRO nicht gefunden werden konnten: {0}; {1}</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasNotUpdatedBecauseOldSettingsCouldNotBeProcessed" xml:space="preserve">
<value>Warnung: DataPRO.exe.config wurde nicht aktualisiert, da die Konfigurationseinstellungen von der zuvor installierten Version von DataPRO nicht verarbeitet werden konnten.</value>
</data>
<data name="InstallerMigrateConfig_ConfigWasUpdatedFromTheMostRecentlyInstalledVersionInstallation" xml:space="preserve">
<value>DataPRO.exe.config wurde von der {0} Installation aktualisiert.</value>
</data>
</root>

View File

@@ -0,0 +1,319 @@
using DTS.Common.Storage;
using DTS.Common.Enums;
using DBConfiguration.Properties;
using Microsoft.Win32;
using System.Diagnostics;
using System;
using System.Text;
using System.Windows.Forms;
using System.IO;
using DTS.Common.Utilities;
namespace DBConfiguration
{
public class CommonUtilities
{
public CommonUtilities()
{
log.Source = "DataPRODbMigratorInstaller";
}
private readonly EventLog log = new EventLog();
public void InitializeDbToTSRAIR(string targetDir)
{
var targetDbDir = $"{targetDir}\\{Settings.Default.LocalDbFolder}";
var scriptsDir = Path.Combine(targetDir, Settings.Default.ScriptsFolder);
DbOperations.Connection.DBName = "DataPRO"; //This cannot be changed during TSR AIR Go installation
ConfigInitializationHelper.UpdateTSRAIRAppSettings(targetDir, true);
var resultString = Attach(targetDbDir, scriptsDir);
DbOperations.Connection.Initialize(InitializationTypes.TSRAIR, targetDir);
_ = Detach(DbOperations.Connection.DBName, targetDbDir, scriptsDir);
MessageBox.Show(Settings.Default.TSRAIRGoInstallationCompletedSuccessfully,
Settings.Default.InstallationStatus,
MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1,
MessageBoxOptions.DefaultDesktopOnly);
}
public string Attach(string targetDbDir, string scriptsDir)
{
log.WriteEntry(Settings.Default.AttachingPrevLocalDb);
SetMigrationStatus(Settings.Default.AttachingPrevLocalDb);
var resultString = InstallDatabase(targetDbDir, DbOperations.Connection.DBName, scriptsDir);
return resultString;
}
public string InstallDatabase(string dBdir, string dbName, string scriptsDir)
{
string resultString = "";
try
{
DbOperations._usingCentralizedDB = false;
DbOperations._usingMSSQL = true;
DbOperations.Connection.Server = Settings.Default.LocalDbDataPROInstance;
DbOperations._usingNTLMAuthentication = true;
resultString = ProcessSqlLocalDbCommand(Settings.Default.StopDataProInstance);
if (resultString.Length != 0)
{
MessageBox.Show(resultString, Settings.Default.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
}
resultString = ProcessSqlLocalDbCommand(Settings.Default.DeleteDataProInstance);
if (resultString.Length != 0)
{
MessageBox.Show(resultString, Settings.Default.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
}
resultString = ProcessSqlLocalDbCommand(Settings.Default.CreateDataProInstance);
if (resultString.Length != 0)
{
MessageBox.Show(resultString, Settings.Default.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
}
resultString = ProcessSqlLocalDbCommand(Settings.Default.StartDataProInstance);
if (resultString.Length != 0)
{
MessageBox.Show(resultString, Settings.Default.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
}
Console.WriteLine("Attaching DataPRO");
//Attach the DataPRO database
var dbFileName = Path.Combine(dBdir, dbName) + Settings.Default.Mdf;
var logFileName = Path.Combine(dBdir, dbName) + Settings.Default.LogLdf;
Console.WriteLine($"dbFileName is {dbFileName}");
Console.WriteLine($"logFileName is {logFileName}");
Console.WriteLine($"_scriptsDir is {scriptsDir}");
resultString = AttachOrDetachDatabase(scriptsDir, dbName, dbFileName, logFileName, Settings.Default.AttachDBsbat);
if (resultString.Length != 0)
{
MessageBox.Show(resultString, Settings.Default.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
}
Console.WriteLine("Attaching ISO");
//Attach the ISO database
dbFileName = Path.Combine(dBdir, Settings.Default.ISO) + Settings.Default.Mdf;
logFileName = Path.Combine(dBdir, Settings.Default.ISO) + Settings.Default.LogLdf;
resultString = AttachOrDetachDatabase(scriptsDir, Settings.Default.ISO, dbFileName, logFileName, Settings.Default.AttachDBsbat);
if (resultString.Length != 0)
{
MessageBox.Show(resultString, Settings.Default.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
}
}
catch (Exception ex)
{
log.WriteEntry($"Exception while getting previous local database version: {ex.Message}; Stacktrace: {ex.StackTrace}");
throw;
}
return resultString;
}
public string Detach(string sourceDbName, string targetDbDir, string scriptsDir)
{
//Detach the databases
log.WriteEntry(string.Format(Settings.Default.DetachingLocalMigratedDb, sourceDbName));
SetMigrationStatus(string.Format(Settings.Default.DetachingLocalMigratedDb, sourceDbName));
var dbFileName = Path.Combine(targetDbDir, sourceDbName + Settings.Default.Mdf);
var logFileName = Path.Combine(targetDbDir, sourceDbName + Settings.Default.LogLdf);
var resultString = CommonUtilities.AttachOrDetachDatabase(scriptsDir, sourceDbName, dbFileName, logFileName, Settings.Default.DetachDBsbat);
if (resultString.Length != 0)
{
MessageBox.Show(resultString, Settings.Default.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
}
log.WriteEntry(Settings.Default.DetachingLocalISODb);
SetMigrationStatus(Settings.Default.DetachingLocalISODb);
dbFileName = Path.Combine(targetDbDir, Settings.Default.ISO + Settings.Default.Mdf);
logFileName = Path.Combine(targetDbDir, Settings.Default.ISO + Settings.Default.LogLdf);
resultString = CommonUtilities.AttachOrDetachDatabase(scriptsDir, Settings.Default.ISO, dbFileName, logFileName, Settings.Default.DetachDBsbat);
return resultString;
}
public MigrationStatus SetMigrationStatus(string migrationStatus, bool output = false)
{
//Remove the previous status
SetStatus(string.Empty);
var migrationStatusClass = new MigrationStatus();
migrationStatusClass.StatusType = MigrationStatus.StatusTypes.MigrationStatus;
migrationStatusClass.StatusText = migrationStatus;
if (output)
{
Console.WriteLine(migrationStatus);
}
return migrationStatusClass;
}
private void SetStatus(string status, bool output = false)
{
var migrationStatusClass = new MigrationStatus();
migrationStatusClass.StatusType = MigrationStatus.StatusTypes.Status;
migrationStatusClass.StatusText = status;
if (output)
{
Console.WriteLine(status);
}
}
/// <summary>
/// Get the path to the latest version of SQL Server Express LocalDB
/// installed, and run the command passed in.
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
public string ProcessSqlLocalDbCommand(string command)
{
//SQL Server Express LocalDB 2014 is a Prerequisite of the DataPRO Installer,
//so it should be there unless it has been subsequently uninstalled.
var localDbPath = GetSqlServerLocalDBPath();
if (localDbPath == string.Empty)
{
log.WriteEntry($"localDbPath is empty");
//SQL Server LocalDb is not installed so display error and go away
return Settings.Default.SqlServerLocalDbNotInstalled;
}
var sqlLocalDbExeFileName = localDbPath + Settings.Default.SqlLocalDBExe;
log.WriteEntry($"sqlLocalDbExeFileName = {sqlLocalDbExeFileName}");
return SqlCommandProcessor(sqlLocalDbExeFileName, command);
}
public static string AttachOrDetachDatabase(string scriptsDir, string dbName, string sqlDbFileName, string sqlLogFileName, string attachOrDetach)
{
const string SqlCmdExe = "sqlcmd.exe";
var oDBCToolsPath = DTS.Common.Utils.Database.GetODBCToolsPath(null);
var fullSqlcmdPath = Path.Combine(oDBCToolsPath, SqlCmdExe); //e.g. $"\"C:\\Program Files\\Microsoft SQL Server\\Client SDK\\ODBC\\110\\Tools\\Binn\\sqlcmd.exe\""
var batchFileName = Path.Combine(scriptsDir, attachOrDetach);
return BatchCommandProcessor(batchFileName, dbName, sqlDbFileName, sqlLogFileName, fullSqlcmdPath);
}
private string GetSqlServerLocalDBPath()
{
var highestVersionInstalledPath = string.Empty;
var rk = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
var sk1 = rk.OpenSubKey(Settings.Default.RegistrySoftwareMicrosoftMicrosoftSQLServerLocalDBInstalledVersions);
if (sk1 == null)
{
log.WriteEntry($"sk1 is null; returning string.Empty");
return string.Empty;
}
var maxProductVersion = 0.0;
foreach (var productSubKeyName in sk1.GetSubKeyNames())
{
log.WriteEntry($"productSubKeyName is {productSubKeyName}");
var thisVersion = -1D;
if (!double.TryParse(productSubKeyName,
System.Globalization.NumberStyles.Float | System.Globalization.NumberStyles.AllowThousands,
System.Globalization.CultureInfo.InvariantCulture,
out thisVersion)) continue;
log.WriteEntry($"thisVersion is {thisVersion}/maxProductVersion is {maxProductVersion}");
if (thisVersion < maxProductVersion) continue;
maxProductVersion = thisVersion;
var newKey = sk1.OpenSubKey(productSubKeyName);
if (newKey == null)
{
log.WriteEntry($"newKey is null (productSubKeyName is {productSubKeyName}); continuing");
continue;
}
var val = newKey.GetValue(Settings.Default.InstanceAPIPath, -1, RegistryValueOptions.None).ToString();
log.WriteEntry($"val is {val}");
if ((val == "-1") || (!val.EndsWith(Settings.Default.SqlUserInstanceDll))) continue;
log.WriteEntry($"highestVersionInstalledPath = {highestVersionInstalledPath}");
highestVersionInstalledPath = val.Substring(0, val.Length - Settings.Default.SqlUserInstanceDll.Length);
}
log.WriteEntry($"Returning {highestVersionInstalledPath.Replace(Settings.Default.LocalDB, Settings.Default.Tools)}");
return highestVersionInstalledPath.Replace(Settings.Default.LocalDB, Settings.Default.Tools);
}
public static StringBuilder sb = new StringBuilder();
public static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
if (outLine.Data != null)
{
if (string.IsNullOrWhiteSpace(outLine.Data))
{
sb.Append(Environment.NewLine);
}
sb.Append(outLine.Data);
}
}
public static string SqlCommandProcessor(string sqlLocalDbExeFileName, string command)
{
var resultString = string.Empty;
sb.Clear();
var process = new Process
{
StartInfo =
{
FileName = sqlLocalDbExeFileName,
Arguments = command,
LoadUserProfile = true,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
};
//* Set ONLY ONE handler here.
process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
//* Start process
process.Start();
//* Read one element asynchronously
process.BeginErrorReadLine();
//* Read the other one synchronously
var output = process.StandardOutput.ReadToEnd();
Console.WriteLine(output);
process.WaitForExit();
if (sb.Length > 0)
{
resultString = sb.ToString();
}
return resultString;
}
public static string BatchCommandProcessor(string batchFileName, string dbName, string sqlDbFileName, string sqlLogFileName,
string fullSqlcmdPath)
{
var resultString = string.Empty;
sb.Clear();
var process = new Process
{
StartInfo =
{
FileName = batchFileName,
Arguments = dbName + " " + "\"" + sqlDbFileName + "\"" + " " + "\"" + sqlLogFileName + "\"" + " " + "\"" + fullSqlcmdPath + "\"",
LoadUserProfile = true,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
};
//* Set ONLY ONE handler here.
process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
//* Start process
process.Start();
//* Read one element asynchronously
process.BeginErrorReadLine();
//* Read the other one synchronously
var output = process.StandardOutput.ReadToEnd();
Console.WriteLine(output);
process.WaitForExit();
if (sb.Length > 0)
{
resultString = sb.ToString();
}
return resultString;
}
}
}

View File

@@ -0,0 +1,80 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace LocalSQLDB.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("DataPRO.exe")]
public string RegistryDataPROExe {
get {
return ((string)(this["RegistryDataPROExe"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("applicationSettings")]
public string ApplicationSettings {
get {
return ((string)(this["ApplicationSettings"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("db")]
public string LocalDbFolder {
get {
return ((string)(this["LocalDbFolder"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute(".mdf")]
public string Mdf {
get {
return ((string)(this["Mdf"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("_log.ldf")]
public string LogLdf {
get {
return ((string)(this["LogLdf"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("DataPRO")]
public string DataPRO {
get {
return ((string)(this["DataPRO"]));
}
}
}
}

View File

@@ -0,0 +1,55 @@
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("OpenFolder")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("OpenFolder")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
//In order to begin building localizable applications, set
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
//inside a <PropertyGroup>. For example, if you are using US english
//in your source files, set the <UICulture> to en-US. Then uncomment
//the NeutralResourceLanguage attribute below. Update the "en-US" in
//the line below to match the UICulture setting in the project file.
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,109 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Common.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Installer\\\\UserData\\\\S-1-5-18\\\\Prod" +
"ucts")]
public string RegistrySoftwareInstalledProducts {
get {
return ((string)(this["RegistrySoftwareInstalledProducts"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("InstallProperties")]
public string RegistryInstallProperties {
get {
return ((string)(this["RegistryInstallProperties"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("DisplayName")]
public string RegistryDisplayName {
get {
return ((string)(this["RegistryDisplayName"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("DataPRO")]
public string RegistryDataPRO {
get {
return ((string)(this["RegistryDataPRO"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("DisplayVersion")]
public string RegistryDisplayVersion {
get {
return ((string)(this["RegistryDisplayVersion"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("SOFTWARE\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Installer\\\\UserData\\\\S-1-5-18\\\\Comp" +
"onents")]
public string RegistrySoftwareInstalledComponents {
get {
return ((string)(this["RegistrySoftwareInstalledComponents"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("DataPRO.exe.config")]
public string RegistryDataPROExeConfig {
get {
return ((string)(this["RegistryDataPROExeConfig"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("InstallLocation")]
public string RegistryInstallLocation {
get {
return ((string)(this["RegistryInstallLocation"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("DTS.Suite")]
public string DTSSuite {
get {
return ((string)(this["DTSSuite"]));
}
}
}
}

View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace OpenFolder.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("OpenFolder.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,39 @@
using System;
using System.Diagnostics;
using System.Windows;
namespace WarnWindows11
{
public class OSWarning
{
public static void Main(string[] args)
{
try
{
var windows11 = false;
using (var process = new Process())
{
process.StartInfo.FileName = "systeminfo.exe";
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
// Synchronously read the standard output of the spawned process.
var reader = process.StandardOutput;
string output = reader.ReadToEnd();
var lines = output.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
foreach (var line in lines)
{
if (line.ToUpper().Contains("MICROSOFT WINDOWS 11")) { windows11 = true; }
}
process.WaitForExit();
}
if (windows11) { _ = MessageBox.Show(Properties.Resources.WARNING_WINDOWS11); }
}
catch (Exception) { }
}
}
}

View File

@@ -0,0 +1,15 @@
namespace DBConfiguration
{
public class MigrationStatus
{
public enum StatusTypes
{
Status,
MigrationStatus,
SourceDb
};
public StatusTypes StatusType { get; set; }
public string StatusText { get; set; }
}
}

View File

@@ -0,0 +1,7 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="uri:settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>

View File

@@ -0,0 +1,667 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA
IACoJQAA7h4AADw8AAABACAASDoAAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAABgDwAAYA8AAAAA
AAAAAAAAt38S/7d/Ev+3fxL/t38S/7eAE/+1ewv/s3gF/7R6CP+zeAX/sncC/7d/Ef+4gBP/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7eAE/+2fQ3/v40t/9CrZf/ZvIP/1LJw/8ykVv+4fxL/tXwM/7iA
E/+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2fhD/uYIX/9Owbf+/jSz/2r2G/+PNov/YuXz/5dGp/7yI
Iv+2fQ7/t38T/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38T/7iAE//BkDL/x5tF/+HKnP/UsnD/vYol/+TP
p//RrWb/s3cC/7iBFf+3fxL/t38S/7d/Ev+3fxL/t38S/7Z9D/+2fQ//tn4P/7R5CP/PqmL/0q9r/8ec
SP/SsGz/tn8U/7Z+EP+3fxP/t38S/7d/Ev+3fxL/t38S/7Z+EP+9hx7/vokg/7d/Ef+8hRv/u4IU/72H
Hf/Bjir/uYAR/8WSLf+4gBL/t34R/7d/Ev+3fxL/t38S/7iBFP+wdgX/3rVg/961YP+oagD/0qRH/+bB
cf/ft2P/2a1U/+S+bv/qxnn/3bNd/7N5Cf+4gBT/t38S/7d/Ev+4gRT/sXcH/9uxWv/tyn7/vYcd/8yc
PP/01Iz/7c2D/8ubOv/syn7/zp9A/+zIff+zeQr/uIAT/7d/Ev+3fxL/uIEU/7F2Bv/dtWH/6sd8/+fE
d//iu2n/68p//+S+bf/kvm3/6sl9/9OpT//ryoD/s3kJ/7iAFP+3fxL/t38S/7iAFP+zeQr/0qRG/+S7
ZP/ds1z/0aJC/+S8Z//huGT/yJUv/9isUP/lvmr/z58//7R7DP+4gBP/t38S/7d/Ev+3gBP/tXwN/8OW
PP/Wtnb/wI4u/8CQM//Qq2L/wY8v/8abR//HnEj/zqdd/8CQNP+2fQ3/t4AT/7d/Ev+3fxL/uIEW/7J2
Af/hyZz/6de2/+XRq//ZvYX/8ObQ/9q9hf/l0ar/1LR0//Hn0v/cwYz/snYB/7iBFv+3fxL/t38S/7iB
Ff+ydQD/4cmc/9W0dv/k0Kn/0a1n//Hn0v/dw5H/59Wx/8idSv/x5tH/27+I/7J1AP+4gRb/t38S/7d/
Ev+4gRb/snYB/+HKnf/n1K//6Nay/8KSNf/LpFX/yaBN//Hn0//BkTT/z6lf/76KJ/+2fQ7/t38T/7d/
Ev+3fxL/t4AT/7V8C//Hm0b/17h7/8OVPP+0eQf/s3cD/7d/E/++iib/tXoK/7N3A/+2fQ7/t38T/7d/
Ev+3fxL/t38S/7d/Ev+4gBP/tHoI/7F0AP+0ewn/uIAU/7iBFv+3fxL/tXwN/7iAFP+4gRX/t4AT/7d/
Ev+3fxL/t38S/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAoAAAAGAAAADAAAAABACAAAAAAAAAJAABgDwAAYA8AAAAAAAAAAAAAt38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4gBT/uIEV/7Z+EP+2fQ7/t38S/7iBFv+4gRX/t38T/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7iA
FP+0eQf/snYC/7mDG/+7hx//uIAU/7J1AP+ydwP/t38R/7iAFP+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uIAT/7V6Cf/InUv/38iZ/+LLn//r3L3/4cqd/+TP
pv/SsGv/t30P/7V6Cv+3gBT/t38R/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+4gBT/tHoJ/8aaQ//bvof/wZIz/7d9D//t4MX/486k/8qgTv/jzqT/7+PL/8OTNf+0egn/uIAU/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3gBT/tHsK/8WWPP/Im0b/xJU7/7mC
F//fxZT/38WU/9a2d//CkTP/5dKr//Hn0/+4gRX/t34R/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d+EP/Flz//y6BQ/9m8gv/t4MX/065r/7mDGf/Elj7/yqBR//Ts
2/+8iCL/tn0O/7d/E/+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3gBP/uIAU/7d/
Ev+1egn/s3gE/7iAFP/m06v/59Wx/8CPL//NpVn/5dGq/9CrYf+1ewn/uIEU/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+0fA3/tHsM/7h/E/+4gBP/uIEW/7N4CP+zeQr/wpI0/8OW
P//JoE7/vokk/69yAP+0ewz/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38T/7Z+
EP/Bjij/w48p/7d/Ef+3fxL/uH8S/8WSL/+/iyP/tnwM/8SPJ/+3fQv/tXwM/8qZOP/IlzP/uH8S/7Z+
EP+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uIAU/7N5Cv/ty3//8dGI/7V7Df+4gBT/uIAT//vf
nP/ftmD/y5s6///rr//Cjij/5sFw//PRiv/y0Yn/6MJz/7Z9D/+3fxP/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t4AU/7N6Cv/syHv/7ct//61xAP+0egz/uIEU//rbl//Zrlb/4Lhl//DNg/+7hBr//+ms/8yc
Pf/NnT7//+ip/72HHv+1fQ//t4AT/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uIAU/7R6C//qxnj/+dqV/9is
VP/HlTL/tn4R//bXkP/vzYP/++Gf/9qxWv+6hBj//+mr/8+gQv/PoUP//+Sl/76IH/+1fQ7/t4AT/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/uIAT/7N6C//qxnj/9daR/9qwWf/84Z//yZg2//PSi//syX3/3LNd//fY
kv/JmDb//+Wm/82dPv/Nnj7//+Wm/76JIP+1fA7/t4AT/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uIAU/7N5
Cv/uzYL/8NCH/7yFG///6Kr/0aVH//falf/guWb/xZIt///qrv/KmTn/+uGf/9ivV//ZsFj//eSk/7uE
Gf+2fhD/t38T/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uIAT/7V8Df/dtF3/78yB/+7Kfv/ju2r/u4QZ/+a/
bv/uzIH/7cp+/9uwWf+zeQf/0aJE/+zKf//tyX3/z6BB/7V8Df+4gBP/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38R/7eAEv+4ghn/vIgk/7qEHf+xdQP/tXsM/7mEG/+5ghj/t4EW/7J3Bf+8iST/tn4R/7Z/
FP+4ghr/t38V/7iAE/+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38T/7Z+Ef/v5c3/9Ozd//Pp
1//Rq2X/0K1m//Lp1f/v4sv/2Lp//86oXv/6+PH/1rZ3/+/kzP/r273/7d/D/7V8DP+3gBP/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/uH8S/7Z8Dv/59Or/1LNy/9u+h//y59T/zahe/+fVsf/u4sr/2r2F/+DH
lv/p2Lj/vIgj/+rcvv/l0ar/8ujV/7R5CP+4gBT/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7Z8
Dv/48+n/1rZ2/9m8hP/z6df/wZAx/9vAiv/069n/2Ll//93DkP/o17T/tn0P/9i6f//o1rT/8ujU/7R6
CP+3gBT/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7Z8Dv/48uj/0q9q/9a3ef/z6tj/w5U5//Ho
1P/y6db/zada/+7hyP/8+vb/yqBP/+bUr//27t//2r+H/7N5Bv+4gBT/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38R/7Z9EP/38OX/4suf/+fVs//v4sn/sXQA/7uGH/+9iST/sXUA/+bTrf/t38P/tHkI/7eA
E/++jCn/tnwN/7d/Ef+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev/bvof/5tSu/+DI
mv/AjzL/t30P/7Z+EP+2fQ//tn0P/8COLv/BkDL/tnwN/7d/Ev+1fAz/t4AT/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+zdwP/snUA/7J1AP+1fAv/t4AT/7d/E/+3fxP/t38T/7Z7
C/+1ewv/t38T/7d/Ev+3gBP/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+4gRb/uIIX/7iBFv+3gBP/uH8S/7d/Ev+3fxL/t38R/7eAFP+3gBT/t38R/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAA
AABAAAAAAQAgAAAAAAAAEAAAYA8AAGAPAAAAAAAAAAAAALd/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3gBP/uIAV/7iBFf+4gBT/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4gBT/uIAU/7V8Df+zeAX/s3gF/7V7Cv+3fxL/uIAV/7iB
Ff+3gBP/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38T/7N4BP+ydwT/vowr/8qiUv/KolH/xJU8/7d+
EP+ydwH/sngF/7d+EP+4gBP/t38S/7eAEv+4fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8S/7d/Ef+1ewv/0axm/+3fxf/p2bj/7d7B//Ts
3P/p2Lf/8+rZ/+3ix//Pq2L/uH4Q/7V5CP+5gBb/tn4R/7d/Ef+3fxH/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4gBT/tHoJ/9e4ev/n1LD/yZ5L/7uF
Hf+7gxr/9vDk/97Dkf/Dkzf/3L2H//r37//27+H/yJ5J/7N5Bf+3gBX/t38R/7h/E/+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7V+EP+5gxj/2Lh6/7J0
BP+vcgD/sHIA/7+MKv/48uj/59Ww/93Ej/+ydgT/tHgI/+PQpv//////x5hB/7N6CP+4gRP/tn8R/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t4AU/7d9
DP/Elj//2bqA/9m7gf/YuX3/t4AS/+fTrP/Pplz/07Jx/+bSqv/ZuX7/1LJv//fv4//m1K//tHoI/7mA
Ff+3fxH/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/tn0Q/7iBFf++iyf/u4Uf/9Wyb//n1bH/8ejU/+LLn/+tawD/uoUd/7qEHv+3fQ//8OXP/+TO
pP+zdwT/uIEU/7h/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+4fxP/tn8R/7Z8Df+3fQ//snYB/8OUOf/38eP/8ebQ/72KJv+6hh//yJxK/+jW
s//t4sf/voso/7V8DP+4gBP/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+4gBT/uIAU/7d/E/+3fxL/t38S/7aAEv+5gxj/tHgF/7+NK//Vtnf/1bR0/9q9
hP/gyJf/0axl/7h+D/+2fg7/uYEV/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38R/7N6C/+zeQn/tn8R/7iAEv+3fhH/uIAT/7Z7Dv+0egz/tHoL/7N3
BP+xdQD/r3MA/7F1AP+1eQX/tHsM/7J5Cf+zegr/t38R/7eAEv+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/tn8T/7d/Ef+4gBP/x5Y0/8mYNP+5gRT/t38R/7eAEv+2fg//wYwm/8uc
PP+/iiL/t38T/8iYNv/LmTr/uoQY/7V9D//Fki3/zp9A/8qXNP+5gRT/tX0P/7d/E/+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxP/tn0Q/7qDGf/43Jj//OOj/7yGHP+2fBD/uIEV/7N5
CP/dtmH///a8/9WmSf+7hBn//+ep//TWkf+3fxH/2a9X///jpP/215H//eGg/+zIff+7gxf/tn4R/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/E/+1fhD/uoQY//XVjv/53Jj/vIce/7d/
Ef+5ghb/s3kK/92zWv//7LP/z6BC/8ubOv//7bH/2rBY/7mAFP/74J7/99qU/7B0A//ftmL///C1/8ud
Pv+0egv/uIAU/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t4AT/7V+Ef+7gxj/9teR//rd
mP+1fA7/r3QC/7d9D/+yeQn/3LNc///us//MnTz/3bVg///rr//Djin/wIsj//3iof/11Y//r3QD/9yz
Xf//7bL/1KVK/7N5Cf+4gBT/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxP/tn4Q/7uE
Gf/11o///uKg/+W+b//ft2L/yZc1/692Bf/etF7//+mr/+3Lf//7353/+NuX/7mCF//Bjib//+Sj//XW
j/+vdQL/3LRe///us//TpEj/s3kK/7iAFP+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7h/
E/+2fhD/uoQZ//XWj//94qL/5L1s//LTi///56j/xJAq/9qvWP//663/7Ml9/+K7aP//56f/5Lxp/8CN
Jv//46P/9daR/7F2Bf/dtF///+2z/9GkSf+zeQr/uIAU/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/uH8T/7Z+EP+6gxj/9daP//rdmf+rbQD/xpIx///yuf/UqU3/16xT///vtP/Lmj7/p2kA//bY
kP/21ZH/xpIv//vfnf/11Y7/qWwA/9qwWf//77P/0qVJ/7N5Cf+4gBT/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+4fxP/tn4Q/7uEGf/325f//+ao/9SnS//nw3T//+6z/8mXNf/bslr///O5/+W/
b//UqEz//+iq/+3JgP+3fxL/8c+G//3mpv/Tpkv/8dGJ///mp//FkCz/tXwN/7iAE/+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2fhD/uoMY/+bBcf/uzIP/8dCI//LQiP/WqE//s3kK/9ao
Tv/vzIT/786E//LRiv/huGT/wY0m/7V8Dv/Cjij/5b9v//LTjf/syX3/zJ0+/7V9Df+3fxP/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t34R/7eAEv+3fQ//rnEA/61uAP+rawD/rm8A/7J5
Cf+2fRH/sHMC/6xwAP+ubwD/rnEB/7N5Cf+ydgT/sXUA/7N3BP+vdAP/rGwA/61vAP+vcgD/uH4R/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3gBP/tHwN/7+NLP/n1bH/69u7/+7h
x//ZuoD/u4Qb/7mDGv/gyZ3/5M2h/9/Flf/av4f/tHsI/9Szcv/u5Mv/0q1p/8ukVv/r3b//2byD/+bS
rP+9iif/tnwN/7eAE/+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7iAFf+1egz/wpQ2////
///t4cj/3cCO///////bvoj/yKFO///////bwIr/+fbw/+fUsP++iCT//fv2//Ts2//In03/9vDi/+vb
u//n1K///////76LJ/+1fAz/t4AT/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uIAU/7V7
Cv/CkTT//////93DkP+zdwX//Pz6/+zdwP+5hB3/8ura/9e5ff/z69r/5tKs/7+NLP/+////27+J/65v
AP/hzKL/59Wy/9/Glv//////vYom/7V8DP+3gBP/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+4gBT/tXsK/8KRNv//////4sqc/7qEGv/9/fz/7d7D/7Z8Cv/QqmL/2LyD//r38f/k0q3/u4Uf//7+
/v/avoj/sHMA/8icR//UtHP/6dm7//////++iif/tXwM/7eAE/+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7iAFP+1ewr/wpE2///////iypz/uYMY//7+/f/q27v/voon///////hy5//+/nz/9/G
lf/MpVj//////+/jy//Aji7/69y+//Dl0P/q2bn/+vjx/7uFHP+2fQ7/t4AT/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/uIAU/7V7Cv/BkTX//////9/Ek/+0eQf//Pr3/+7hx/+wdAD/z6ti/+7j
y//iz6T/vIgf/9q+hf//////+fTr/8qhUP++jCr/5tSu/+7gxf/KolP/tHsK/7iAFP+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4gBP/tXsK/8KSOP//////6dm4/9Gua///////4s2h/7N2
BP+0ewr/sXQA/7R3A/+zegb/v4wr/////v/bwIz/sXIA/7d+EP+xdQD/sXQA/7V6Cf+4fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7eAFP+1fAz/wZAy//Dkzf/y6NX/9O7f/+DJ
nP+9iif/t34O/7iBFv+4gRb/uIEW/7Z+Ev+7hRz/y6FQ/8KSN/+4fhD/t4AU/7iBFv+4gRb/uIAU/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t34S/7eAEv+3fhD/tXkI/7R5
B/+0eAT/s3gF/7V9Dv+3gBP/t38S/7d/Ev+3fxL/t38S/7Z9EP+0dwT/tXsK/7d/E/+3fhH/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxH/t38S/7h/
Ev+3gBT/uIAU/7iAFP+4gRT/uIAS/7h/Ev+3fxL/t38S/7d/Ev+3fxL/uH8T/7mBFf+3gBT/t38S/7h/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxP/uIAS/7d/Ev+3gBL/uH8S/7Z/Ef+3gBL/uH8S/7d/Ev+3fxL/t38S/7d/Ev+2fxH/tn8T/7eA
Ef+3fxH/tn8T/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev8AAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA
AAAwAAAAYAAAAAEAIAAAAAAAACQAAGAPAABgDwAAAAAAAAAAAAC3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+4gBT/uIAU/7d/Ev+3fxH/t34R/7d+Ef+3fxL/t38S/7iAFP+4gBT/t4AT/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t34T/7h/Ev+3gBH/uIEV/7d/E/+0egj/s3cG/7R7Cv+2fA//t4AR/7iAEv+1fAz/tXsL/7R5
Bf+0eQf/tn0P/7iCGP+3gRL/tn8Q/7h/Ef+3gBD/toAT/7iBEv+4fxP/t38T/7d/Ef+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38P/7d/E/+4gBb/tXoM/7N5Cf+/kDH/xppH/9/Jm//u4sf/8erZ//Hn
0v/lz6f/2LqA/8SVPv/BkjD/uoYd/7B0AP+6fRD/uYAW/7d/EP+4fhX/tn4T/7d/Ef+4fxL/uH8S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxH/uX8T/7eAEv+2fQ3/vokm/+PNov//////+/jy/+7g
xf/kzKD/8ubQ/+/kzv/p2bn/+/jx////////////7N7C/86qYP+9iCP/snUA/7mBF/+5fxP/uH8R/7V+
Ef+2fxL/uH8R/7d/Ef+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uIAS/7Z9Dv+8iib/9u7g/+7g
yf/MpVf/xJY7/7eAFf+pYwD/3MCL//Pr2//Tr2z/vYkk/86pXv/fwZH/+/ft///////y6NT/1rNw/7N6
CP+0gBD/uH8T/7Z/Ev+4fhL/uH8T/7h/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uIAX/7R4
B//k0af/4MWV/7R9Df+zdwH/tn0O/7yEG/+0dQL/4s6j///////9/fr/2bt+/65wAP+1egv/wI4s/9m+
iP/9/v3//////+DMmv+4egj/t34V/7aAEf+2gBH/t34S/7h+E/+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+2gBL/toAT/7V6Bf/exI//tHgM/7FwAP+ydwL/sXMA/7R+Ef+0dwT/38WU//z79v/HnUn///75/+LP
pP+4ghb/rnAD/65qAP/BlDj/9e/h///////aun//sngC/7iBFP+4gBL/tn8R/7aAEf+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxP/t4AT/7l+Df/BkTn/1bR3/9m3ev/TsnH/2rp//8OUO/+sbQD/y6FO//z6
9f/NpFb/vIgl/+/l0P/w4sn/2bt8/9q5gP/Us3H/4s2j///////v5M7/uokl/7d9D/+6fxX/tn4S/7d+
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t4AS/7h+Ef+1fQ3/1LJw/9a3ev/TsG3/38SV//Pq
1f/avob/tH0N//Tp1v/z5dD/r3EA/7iBFv/Rrmb/2bqC/9e5f//bvYP/ypxM//z38f/58+n/xZc+/7R7
Bv+6gRf/t4AR/7d/Ef+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8S/7V+Ev+3fxL/snQB/7By
AP+xcwH/sXMA/8ifSf/37+P/7eLI//f06f/07Nz/uoIX/7mBF/+zeAX/r3QA/7BvAf+saQD/vY0v////
///q2rn/tn0Q/7d/FP+2gBH/uH8S/7h/E/+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2fxH/un8T/7h/
E/+2fxH/uoAX/7iBFv+3gRj/vYAW/7N4B/+7hyD/6Ne1///////59u7/xZY9/69vAP+wdgL/snYE/7yG
Iv/RrGj/+vjy//Xy5v/MolL/s3kF/7mBFf+3fxH/t38T/7d+E/+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/tn4T/7aAEv+2gBH/t34S/7d/Ef+3gBL/toAQ/7aAFP+3fg//tHcC/+PPov/38+r/4MSU/9Gv
af/WuX//3cCL//Tt3P/59On/5M6g/8KPLv+zegj/t4AU/7h/Ev+4fxL/toAR/7aAEv+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t34T/7h/E/+4fhT/t38R/7Z/Ef+2fxL/t38T/7iAE/+3fxP/t34S/7uG
IP/EmUD/0apj/9Oyb//YuX7/2byD/9OvaP/BkTP/snUD/7d8Df+4gRT/t38R/7eAEf+3fxP/t38R/7d/
E/+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/uIAT/7iBFf+4gRX/toAT/7d/EP+3gBP/uH8S/7d/Ev+3gBP/uIAS/7l/
Ff+6gRT/uYIV/7d9Ef+0eAn/snYA/7N3Af+ydQD/rXMA/7N1AP+1fAr/uoMY/7mCGP+2gRX/uYET/7mB
Ff+3fxP/t38R/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+2fxP/t38S/7d/Ef+4gBH/s3wP/7B2Bv+xdgP/s3oL/7aAFP+5gBL/t38R/7d+
EP+4fxL/t38S/7N4Cv+ydgf/sHcG/7d+Ef+5gRf/tn8P/7J5Cf+zeAv/tX4O/7eBF/+7ghX/t34P/7J4
Bv+xdwb/sXcI/7J5B/+3fw//uIET/7Z+Ef+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2fxL/t4AT/7eAEv+2fA3/wo8q/9OmSv/UqEv/x5Mu/7Z8
Df+2gBP/t4AQ/7h/E/+2gBD/uH8R/8ucPP/Upkv/0KVH/7yGG/+zeQz/wY0m/9OnTP/TpUv/yJQv/7d/
EP+zegz/vIcf/9GgQ//Rpkj/06ZJ/8+ePf++hx7/snsN/7eBFP+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3gBL/t34T/7mBFf+vdgj/2q5X///s
r///8bf/3bhm/7F3A/+6gBj/uH4U/7Z/Ev+4fxH/uH8V//HSiv//8LP//+uq/8aQKv+yeAj/3bdj///y
uf/+6q7/2KpU/7B4A//GlC7/8M2E///oq///87j///O5///lpv/wy4T/xpMt/7d7DP+3gBT/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8S/7iB
E/+yeAn/1qlN//zgnv//5KT/3bFa/7B3B/+3gRT/uH4R/7d/Ev+2fxH/uIET/+zKev/+4qP/+96c/8KN
JP+6gRL/6sh8///lpf/52ZT/vIce/7mBFv/syHz//+6u//TYkP/JlDX/yJo7//bak///7rH/6cR2/7d/
Ev+3fxL/t38T/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+4fxL/tX4T/7iBFP+xeQj/16pQ//7iof//5qf/2rJc/7F3Bv+5gRT/t38S/7Z/Ef+3fhP/uIAT/+/M
ff//46f//d+g/7+LIv+/iiT//N2b///lpf/pw3X/tHwN/8SOJ//01Y///+iq//DOhP+ydgX/snYF//DO
hP//6Kr/8tOK/7+NKP+1fA7/uIAT/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+4fxL/tH8T/7mBFP+zeAj/1alQ///jof//56f/3bNd/7N3Cf+6gxj/uoAU/7h/
E/+2fxH/uIAU/+7Lfv//5aX//eCc/8CMJf/Qpkr//+eq///oq//SpEb/s3cH/8eVM//425X//+eq//HP
hv+yew3/tXoL//DPhv//6Kr/+NiT/8aTL/+0ewz/uIAU/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxL/tn8T/7iBFv+zeAf/1qpQ//7iof//6Kb/2q9W/6xu
AP+xegr/tHoJ/7Z8Dv+0fw//uIAS/+3Kfv//5KX/+96c/72IHv/huWf//+ao//nalf/BjSj/snUH/8qb
OP/7357//+in//HPhf+zeQv/s3oJ/+/Phv//6Kr/+NeS/8aRLv+0ewz/uIAU/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxL/uH8S/7iBFP+yeAj/1qpQ///j
o//+46L/+duY//TSjf/01Iv/5r9v/8mUMv+zeg3/uYAX/+7Lfv//5aT//uKh//XWkP/94Z///+en//LR
iP+/iyP/rncF/8qZNv/93pv//+eo//HPhv+yegn/s3oI//HPhv//6K3/99iQ/8aSLf+0ewz/uIAU/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxL/t38S/7iB
Ff+yeAj/1qpQ///jo//+4qL/+NuY//LSi//53Jf//+an//vemv/JmDX/tnsN/+/Lgv//5KT//eGe//XW
kf/y0of/+d2a///mp//10ov/toAS/8mYNf/83pv//+ep/+/Phv+zegn/s3sM/+/Phv//6Kr/9teT/8SR
Lv+0ewz/uIAU/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+4fxL/t38S/7iBFf+yeAj/1qpQ//7iof//56f/2a9Y/6psAP/Cjir//N6c///rrv/humf/tn8Q/+7L
f///5aX//d+d/72IHv+ucQD/3LBZ///pqf//5aP/zps8/8WVMf/53p3//+eo//HPhv+1egz/tHsK//HP
hf//6Kv/9teT/8STLv+0ewz/uIAU/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+4fxL/t38S/7iBFf+yeAj/1qpQ//7iof//56f/3bNd/7F2Bf+4gBX/+9yc///o
qv/nw3H/uoQW/+3Kfv//5aj//eCe/8SPKv+udAP/zJ04///lpv/+4aL/1KJJ/8KOKP/22JL//+iq//DP
g/+weAX/sXcJ//DPhP//6an/9deQ/8SRLf+0ew3/uIAU/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxL/t38S/7iBFf+yeAj/1qlP//3gn///5KX/27Jd/7B1
A//LmTj//N6d///sr//dtV//tn0Q/+3Kff//46P/+96b/8KPKf+yegn/3bRe///prf/+5KT/zJs+/7mD
Fv/vzoT//+uu//PUjP+5hhz/wooi//TVkf//7K//7st//7uDGv+2fhH/t4AT/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38T/7mBFf+yeAj/2a1V///s
r///6q3//+iq///npv//6az//+eq//LRif/EkCz/tn0Q//XTif//7K///+ms///oqf//6Kv//+ip//3h
oP/qwnb/t4IU/7N5Cv/RoUb/+tuX///oqf//6Kv//+ms///opv/32JX/zp4//7N6C/+4gBT/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fhP/tn8R/7iA
FP+0ew3/yZo4/+O9av/ju2v/471p/+S8a//kvWz/37Rg/8CIIv+zegr/uYIT/9qtVv/ku2z/4rxp/+O9
av/jvW3/4LZh/8+fP/+4fhL/tn4O/7mAFf+0egn/xJIu/961YP/gvWz/5L1s/9yyW//FkS7/snsJ/7iB
E/+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxH/t38Q/7d/Ef+3gBP/tHkK/7B0AP+vdAP/rnMB/7BzAf+xcwX/snYH/7V+Ef+2fxT/uH8S/7B2
Bf+tdQH/r3UE/7BzAv+vdAH/sXYF/7R5Cv+4gBP/tn8Q/7d9D/+5gRH/s30Q/7F1Bf+udAD/sXMD/7B2
B/+0ewr/uX8S/7h/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+4fxL/tn4T/7aAEv+4fxH/uoIa/7mGHf+7hBv/vIMY/7qEGP+3gRj/tn4P/7aA
Ef+4fhT/tnwP/7uEGP+5hBX/un4P/7uDHf+7hRz/uYMW/7iBE/+5fRL/uIEa/7eCFv+5gBP/uH4Q/7eC
FP+8hRz/uX8R/7d+E/+6ghv/uoEX/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2gBD/uIAR/7V/Fv+0ewn/5tOu///////8+vb////+////
///t3MD/0ahe/7iAEv+1ewv/0K5s//r49P/9+/f/3MKN//Xv4v/38+j/wZE0/7N5Bf/Ut3j//Pv2////
///r277/vosp/+HLoP//////7ePI/97Gl///////48+l/7J2Af+4gRb/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2fhT/uX8V/7mAF/+0fAj/59Wx////
///59u7/4cyi/+3bwP////7//Pn2/8qfU/+3hRj/9vHl///////p2rf/7ODH///////38uX/voop/8KO
Lv/38ub///////Ps2f/Rrmv/1bV1///////48+n/5dGp//jy5f//////482i/7BzAP+5ghj/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4gBP/uIAU/7iA
Ff+0egn/59Sw///////x6dT/sHAA/8CLK//17+L//////+LJnP+zdwT/9/Ln///+/f+9izD/xZpO////
///48+j/vYkl/8eYQf/49e3//f///9GqZv+qaQD/0Kxk///////s3r//rGsA/+fUtP//////4Myh/7By
AP+5ghj/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/uIAS/7iAFP+1egv/59Sx///////z69r/uYQa/7+OLv/z7d7//////+POo/+tbAD/z65v////
///q3b//2r6E//39+//48+j/vYkl/8SXPf/59u///v38/8+qYv+1ewn/uoUc/+LRrP//////2r+I/+zb
vf//////4s2i/7ByAP+5ghj/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/uH8T/7iAFP+1egr/59Sx///////z6tn/uIAT/8COL//17uH//////+LM
oP+xdAD/uoYZ/8eYQf/jz6f/+PPq//7////28ub/vIop/8aaQf/49+///v3+/9CsZv+zegr/uYIY/7yH
If/UsGv/697C//r28f//////482j/7ByAP+5ghj/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8T/7iAFP+1egv/59Sx///////06tn/uYET/8CO
Lf/07uD//////+LMov+wcAD/5c2j/+7gxP/BlUX/xJZH///////28eb/uoQd/8KOMP/59O3//v/9/8mh
Uv+ubQD/yJxF/+vbvP/gypr/r3IK/+bRr///////4Mmc/7FzAP+5ghj/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8T/7iAFP+1egv/59Sx////
///z69n/uIAU/76OLP/17uD//////+POpP+sagD/6dW1///////y59P/7d7D///////v5Mz/uYMZ/+LM
oP/9/fz//v36//Hlzf/Op13/vYom//39+//+/fz/6day//nz5v//////1rV2/7N3Af+4gRf/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8T/7iA
FP+1egv/59Sx///////069r/u4IZ/8CPLv/17t///////+LNof+ucwD/vYoj/+LMoP///////////+/n
0//Flzz/wY4r//Tt3f///////Pv4///////gyZv/tnwL/8ujU//v6NP///////79/P/fyJr/toIV/7Z/
Ef+3fxP/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/uH8T/7iAFP+1egr/59Sx///////y6db/sXQA/7yIJ//z7N///////+LMnv+wcgD/t4AU/7d/
Ev+4gRn/uYIW/7iBE/+2fw3/tXwM/8aZQv/38+n//Pv4/8+qXv+zegX/uIAW/7d8Dv+4gRT/uYAW/7mC
F/+3fRD/uH0O/7eAEv+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/uIAR/7eBFP+1egv/59Ow///////38OP/0K1n/9zDkf/9+/j//v///9Gu
aP+zdQX/uIIX/7d/Ef+2fg//tn0P/7h+Ef+4ghX/tHoL/8ecRf/79u///////9Gua/+0dgP/uYEV/7eA
E/+0fxD/uH0Q/7d+Dv+3fxL/uX8U/7d/Ef+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2fxP/t4AS/7eBFv+2ewz/6Naz///////+/fv////+////
///069z/2byG/7iBF/+4gBD/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxP/tH0Q/76KJP/Srmb/07Fw/8GP
Mv+4fA3/uIAU/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fhP/uIAT/7eBEf+0fhH/xI8w/8WY
Qf/Elj3/w5Q4/8OVPf++iyj/tXwP/7Z+D/+5fxP/uH8S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/tn8T/7d7
D/+0dAL/sHQA/7V8Cv+3gBL/tn4R/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2fhH/t38S/7d/
Ev+3gBL/tnsK/7N4Bf+zeQj/tXkG/7R5Bf+0fAr/uH8T/7aAEv+2fxP/t38T/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/tn8R/7Z/E/+4gRf/uYMV/7iAFf+2fhH/uH4R/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxH/t34S/7h/Ef+3fhH/tn8T/7eAFP+4gBT/uIAU/7mAFP+3gBT/toAR/7p+Ef+4gBL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/uH8T/7h/Ev+3gBD/uoAS/7Z/Ev+3fxP/un4T/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxH/uH4S/7Z/Ev+5fxL/uH8T/7d/E/+4gBP/tH8T/7eAE/+5fhL/tIAQ/7iA
Ef+4fxP/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH4S/7h+Ev+2fhT/tn8U/7aAEf+3fw//tn8S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8U/7aAEv+3fxL/uYAR/7Z+E/+2gBH/uIAS/7h/
Ev+3gBH/tIAS/7p/FP+4gBH/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t4AQ/7V/Ef+2fxP/uIAR/7aA
Ev+5fxH/t38U/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAPAAAAHgAAAABACAAAAAAAEA4
AABhDwAAYQ8AAAAAAAAAAAAAt38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7Z+E/+4fhT/t38Q/7eAEf+3fxL/t38S/7Z+Ef+4fxL/t30T/7Z/
EP+4fhX/t38S/7iAD/+4gBP/t38S/7h/Ev+3fxL/uIAP/7Z+Ef+4fxL/tX8U/7iBEv+0fxD/tn8Q/7h/
Ev+3gQ//t38S/7aBEv+5gRL/uH8S/7d/FP+3gBH/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/EP+2gA3/uH8W/7d/FP+4fhT/t38S/7eAEf+0fxH/uH4U/9S3
ev/dw43/7N/F/+vexP/s4MT/2Ld4/9W3fP/BjS//tn0U/7eBDv+4fxL/tX8U/7p/Ef+8fhT/tn0Q/7d/
EP+4fhT/tX4V/7h+FP+3gBH/uH8S/7h/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7p/Ef+4fxb/tn8Q/7d+Ef+4fhX/tn8Q/+PNpP/79/L//v7+////
/v///////f76//7+/v///v7//v3//////v///////f78//Xu2//hzqP/t4AR/7WAEv+5fhD/uH4U/7eA
Ef+5fxX/un8R/7R/EP+1fRD/tYAR/7p/Ev+2fxD/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7iAEf+3fhH/t4EP/7iAE//QqmL///79///7/P/v6M//3sOQ/8ie
S/+4fhT/vH8R/+3fw//Vt3z/x55J/9e4e//w4MP/+fr2///+/////v////79/+7fxf/Bjy//t4AR/7t/
Ff+0fxH/un8S/7d/FP+4fxL/t38S/7Z+Ef+6fxH/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7iAEf+4gBX/t34R/8acSf//////6NW0/7aAFf+6fxL/t38S/7Z+
D/+3fxT/t38O//3//////v7/8+XS/7d/Ev+3fxL/uH8S/8ybS//u4cH//f/+//7+/v////7/7Naz/7R/
Ef+2ghD/tH8R/7iAEf+0fxH/uX4R/7mAE/+3fxT/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7Z+E/+5fxb/t38S//Tu2//ZtXn/tH8Q/7eAEf+3gBH/t38S/7p/
Ef+8fhT/tn4R//79///+/v7//P7+//bu3f+/jy//t4AR/7h/Ev+3fxL/wo4w/+3n1P///v3//f////Xw
2/+7gBP/vH4U/7R9FP+4gBH/tYAR/7Z/EP+5fRP/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7OBEf+4fRD/toAN/+rYs/+5gRL/un8S/7d/FP+3fxD/uH8S/7N/
FP+3fxL/uX8V//fz6P/8/Pb/vo4u//v57v///PT/vI8u/7eAEf+3fxL/t38S/7p/Ev/fzJ////7///7+
/v/t38P/vH8R/7OBEf+3fw7/uYES/7Z+E/+1gQ//t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/FP+4gA//un8S/8+paP+2gBX/vH8R/7d/Ev+3fxL/uH8S/7h/
Ev+2gA7/un8S/+XOof//////yJxI/7h+FP/w59P//fv6/9q2ev+3gQ//un8S/7d+Ef+zgRH/6te2////
///7////x55J/7V/FP+6fhT/uH8S/7d/Ev+3fhH/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/FP+4fxL/un8R/7V/FP/x5tL//PXy//Do0f/17N7//vv2/+PN
pP+3fhH/tYAR/8ieS/////z/69i1/7d/Ev+4gBX/1bZ5//j15//89+7/+fbx//z27//99/D/28KQ///8
/v//////3sKT/7WAEf+3gQ//vH4U/7V/FP+3fhH/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7eAEf+4fxL/tn4R/7d+Ef+3gQ//tn4T/7eADf+3fRP/wY4y//Ho
zf/++/b/1bZ3/7aBE///+/j///n5/7h/Ev+3fhH/uIAR/7d/Ev+4fhT/tn4T/7eAEf+3fxL/un4U//34
7//9////38SM/7h+FP+4gA//t38U/7mBEv+4gA//t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fRP/tH8Q/7h/Ev+4fxL/uH8S/7d+Ef+3fxL/uH8S/7aB
E//lzaP//P7+//Ln0f/3+O///f///8KPL/+4fxL/t38U/7h/Ev+1gBH/t30U/7uAEv+3fhH/xZ5J//3/
/v//////v48v/7Z+E/+3fxT/tn8Q/7Z+Ef+4fhT/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7eAEf+9fhb/tYAS/7d+Ef+4fhT/un8R/7R+E/+4fhX/vn4S/7d/
Ev+3fxL/z6tl/////////////v7+/9a3ev+4fxL/t38Q/7R/Ef+3fxL/t34R/7d9E//Pq2X//Pv3//v/
///lzqH/uH8S/7eAEf+3fhH/t38Q/7mCE/+3fRP/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fRP/t4EP/7WAEf+4fhT/t38Q/7aBE/+3gBH/t38Q/7N/
FP+3fxL/uIAR/8GPL//7+e7///7//93Cj/+6fxH/tYAS/7d/Ev+3fxD/1rZ7//Tt3P//////+/rs/9Gr
Y/+3fxL/t38S/7d/EP+6gRT/tn4T/7Z+Ef+1gBL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7h+FP+zgBL/uIAV/7Z+Ef+3fxL/uIAP/7d9E/+3gBH/tYAS/7iA
Ef+3fxL/uH8S/7d+Ef/PrGL/3MiY/+7fxf/t3sT/8u7c//n28v///fz/+vfv/+7hwf/RqmX/uX4R/7l+
Ef+4fxL/tYAS/7h+FP+1fg//uYES/7iAEf+3gBH/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d+Ef+6fhT/uX4R/7h+Ff+3gBH/t34R/7SBE/+4fxL/uH4U/7iA
Ff+2fhP/t4AR/7d+Ff+4fxL/tn8Q/7iAEf+4fxL/t38Q/7p/Ef+1gBL/uX4R/7iAE/+2fhP/uIES/7h/
Ev+4gBP/t38Q/7iAEf+4gRL/tX4V/7Z+D/+3fhX/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+0fxD/uIAR/7WAEv+4fxL/un8S/7Z+E/+5gRL/t4AR/7d9
E/+6fxH/uH8S/7eAEf+3fRP/uH4U/7Z+Ef+3gBH/uIAV/7iAEf+yfxH/un8R/7eAEf+4fxL/t38S/7h/
Ev+zfxX/t38O/7h/Ev+4fxL/t38S/7h/Ev+3gBH/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+1fxT/t34R/7d/
Ev+4gA//tYAS/7d/FP+2fhH/tn8Q/7Z+Ef+yfhP/uYES/7uAE/+3fxL/tn0Q/7iAD/+4fhT/t38S/7h+
FP+4fxL/t38U/7eAEf+4fxL/t38U/7iAD/+3gBH/uH8S/7d9E/+5gRD/tH4T/7iAEf+7gBL/uIAR/7h/
Ev+3gQ//uH0W/7WAEv+3fxL/uIAR/7iCEP+3fhH/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2fhP/uIES/7R/
Ef+4fxL/uH8S/7R+E/+3fxL/uIAR/7t/Dv+8fxH/tX8U/7WAEv+2gA7/t38U/7d/Ev+3gBH/uX4Q/7WA
Ev+3fRP/t38S/7J/Ef+6fxH/tn4R/7eAEf+3gBH/tH8R/7iAFf+3fw7/uIES/7Z+E/+2fxD/tH8Q/7p/
Ef+0fxH/uYES/7iAEf+4gA//t4AR/7d+Ff+1gBL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+1gBH/t38U/7mA
E/+3fw7/tX8U/+7Jef/+4qH//eOh//LVkP+0fhP/uoEO/7d+Ff+4gBH/uH8S/7eAEf+3gQ//t38U/+vH
e//+46D//uKh//fXjP+3fxT/tn0U/7qFHf/62pj//+Gi///gof/nuWv/t38O/7h/Ev+3fxT/2atX//bT
kf//5KH//uKi//7iof/yzIT/2qtV/7WAEf+5gBP/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+5gBP/tnwS/7h/
Ev+0fRT/uH4V/+zIfP/+4qH//uKh//PVjv+5gBP/t38Q/7d9Fv+4fhT/tH4T/7d/Ev+6fhT/t30T/+rI
fP/946H//uOg//fWjf+6fxH/uIAP/86gQf/94p///+Kh//zioP/On0P/t4AR/7WBD//ownD//uOg//7i
ov//4p///+Kh///kof/+4qH//+Gk/+bBcf+9fhD/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2fhH/uIAT/7iA
D/+1gBH/un8R/+vIeP//46L//+Gi//fWjf+3fRP/tYAS/7Z/EP+5fhD/t38S/7iBEv+1gBH/uYIT/+zK
d//+4qL//uGk//bWj/+4fxL/uoAP/9uzYP/+46D//+Gi//3cl/+8hhv/uH4V/9CgQf//4qX//uSe//vj
of/MmDr/tX4W/8ygQ//946D//uSi//7iof/ImTf/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4gBP/tH0U/7h/
Ev+1gBL/uIAR/+3Jff/94aD//eKf//HUj/+3gBH/t4AR/7Z+Ef+1gBL/tn4R/7Z+Ef+4fxb/tn8Q/+7J
ef/+4qL//d+k//bVkP+3gBH/tn0U//PNhf/+4qH//+Gg/+fBc/+1fxT/uX8O/9yyX//946H//OGh//7j
oP+4fxL/vH8R/7d/Ev//4qH//+Gi///jnP/TrFf/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxL/tH8R/7iA
Ef+3fhH/t38U/+vHef//46L//uKi//bVjP+3fxT/t30T/7uAE/+6fhT/uX4R/7aBE/+5fRP/t38U/+3K
ev/94aH//uOg//bVjP+2fhH/wpQv//7joP/+4qX//OKf/9CgQf+4gBH/t34R/+W7aP/94p///+Gi///g
o/+1gBL/toAV/7l+EP//46L//eGh//7iov/ju2n/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4gBH/s38V/7d/
FP+6fxH/t38S/+zIfP/+4qH//uSe//XVjv+4gBH/uH8S/7OAEv+1gBH/u30R/7R+E/+3gQ//t38S/+vH
ef//46L//eGg//XVjv+3fxL/16xV///hov//4KH//uKh/7yFHP+5fRP/t38U/+jIfP/+4qH//uKh//7j
oP+4fxL/t30T/7iAEf/74qT//uOg//7iof/kuWj/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxL/t38S/7d/
Ev+3fxL/t38S/+zIfP/+4qH//uKh//bWi/+4fhT/t38U/7Z/EP+4fxL/un8S/7OBD/+2fhH/t4AR/+zI
ev/+4qL//+Gg//PVjv+3gBH/5sFx//7iov/+4qH/5sFx/7d/FP+4fhT/t38Q/+7Jef/94aT//uSe///h
oP+1fhX/t4EP/7Z+Ef/+4qH//+Ch//7iov/kuWj/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxL/t38S/7d/
Ev+3fxL/t38S/+zIfP/+4qH//uKh//3iov//4aL//+Kh///kof/wz4b/3KtV/7Z+E/+3fhX/t34V/+zI
ev/94p///+Oi///jov/84KD//+Oi//zioP/946H/6MFy/7WAEv+1gBH/s4AS/+7Hef/+4qH//eGh///i
of+3fxL/t38O/7eAEf/+4qL//uKl//3in//ku2b/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxL/t38S/7d/
Ev+3fxL/t38S/+zIfP/+4qH//uKh//7iof/94aH//eKi//7joP/94qL//uKh/+fCcP+3fxD/un8S/+7H
fP/94aD//eGg//3in//94aT//+Og//vjof/+4qL//uSi//XNhf+1gBL/uIAR/+vHef//4qH//uKh//3i
ov+0fxH/t38S/7SAFf/+4qH//+Gg///iof/guWr/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxL/t38S/7d/
Ev+3fxL/t38S/+zIfP/+4qH//uKh//HVjv+5fxX/t4AR/86fQ//+4qL//OKg//3hoP/Fky//tn4R/+rH
ff//46L//+Gg//bWjf+2fxD/t34R/9GhQv//4qP//eOh//7iof/Qn0P/tn8Q/+nJfv/94aH//uKi//7i
of+4fhT/u4EQ/7h/Ev/94aD//+Oi//3go//gumj/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxL/t38S/7d/
Ev+3fxL/t38S/+zIfP/+4qH//uKh//fXjP+2fRT/uIAR/7d+Ff//4KH//uKh///jo//UqEn/t38Q/+7J
ef/+4qH//uKi//bVkP+3fhH/uH8W/7iAE//214z//+Kh///jnv/brFb/uH8S/+TAcv/94qL//eGg//7i
of+5fhH/sn4T/7h/Ev//5KH//uKh//7iof/hvGj/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxL/t38S/7d/
Ev+3fxL/t38S/+zIfP/+4qH//uKh//bWj/+2fhP/uIAR/7d/FP/+4aT//uKh//7iof/SqEj/t38S/+rI
fP/+4qX//uKi//bWjf+3fhH/tYAS/7d/Dv/0143//eGk//zgo//brFj/uH4U/921XP/+4qH//eOh//7j
oP+0gA7/uIAR/7d/FP/+4qH//uOg//3joP/csl//t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxL/t38S/7d/
Ev+3fxL/t38S/+zIfP/+4qH//uKh//PUj/+3fxL/t34R/9CgQP//4aL//uKh///ioP/Fky//uH8S/+zI
ev//46D//+Gi//TWj/+3fxL/tn8Q/8qZN///4aT//eGg//7joP/PoEX/tn8Q/86gQf//4qH//eGg///i
oP/Fmjn/uX0T/9GhQv/94aT//+Oj//3in//Nmjr/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxL/t38S/7d/
Ev+3fxL/t38S/+zIfP/+4qH//uKh///hov/9453//+Kh//3iov//4aL//eKf/+bAcv+5gBP/t38U/+/J
e//94p///eGg///iof//4qH//uGk//3in///4qH//uKh//PMh/+1gQ//t38S/7h/Ev/sx33//uOg//7i
ov/946H//uKh//7kov/+5J7/++Cg/+jDcf+3fxT/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fRP/toET/7Z+
E/+7gBL/tX8U/+zJef/+4qH//+Gi//7iov/+4qH//eGg//7joP/725n/3KxU/7V/FP+3gBH/uIAT/+7I
ev/94aD//+Ch///jov/94p///uKh//7iof/vx3z/2K9T/7p9Ff+1gBH/t30T/7mAE/+3fRP/2q5V//bV
jP/+4qH//eCj//7iof/zz4P/26xY/7Z+E/+4gBH/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxL/tn4N/7iA
E/+0fxH/uIAT/7WAEv+4gBH/t38U/7d/Ev+3gA3/u34W/7h+FP+4gBP/t38U/7d8D/+3fxL/uIAP/7h+
Ff+4fhT/t38S/7WAEf+5gBP/tXwT/7iAEf+1fRD/uIAR/7d/Ev+4gQ7/uIAT/7d/EP+4ghD/sn4U/7p+
FP+ufxP/uIAP/7d/FP+1fxT/t38Q/7SADv+4ghD/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2fxD/t38S/7d/
Ev+4gBH/uH4U/7l+EP+3fxD/t38S/7Z9FP+3fxL/tn4R/7h+FP+5fRP/t4AR/7SAFf+2fhP/uH4U/7d/
EP+ygBD/toET/7d9E/+3fhH/uIES/7h/Ev+4gBX/uH0Q/7iAFf+1fxT/tn4T/7p/Ev+4gBP/t38U/7d/
EP+6fxL/uX4R/7d9E/+3fxL/t38S/7p9Ff+6fhT/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fhT/tn4T/7WA
Ev+4gBH/t38S/7iAFf+zgBL/t34R/7uAE/+4gBH/t38S/7N/FP+3gBH/s34Q/7p/Ev+4fhX/t38S/7qA
D/+4fxL/uoEO/7t/Ff+3fhX/t34R/7d/Ev+1gQ//uIAV/7p+FP+4fhT/tH8R/7eAEf+4fxL/uH8S/7aB
E/+0fxH/un8S/7d/Ev+3fRT/tnwS/7iAEf+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3gQ//t4AR/7R9
FP+1gBH/wo8x//3///////7////////+/v/9/////////+XLo//Nn1H/u4MU/7d+Ef+3fxL/zahk//n2
8f/8/v7/6tSw/8ypYP///////v7+/82qYf+5fhD/tH8Q/9KycP/+//3////+///////YuoP/uH8S/9m7
gv///v///v7+/9i8gP/bwpD///////3///+7hyL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+0fhP/u4AS/7h+
FP+1gBL/wpAw//3////+/v7//f////r//f///v///v7+//7//f//////zaZh/7eAEf+/kjH///////v9
/f////7//P/9//n27v/+/v7////+/8iiUP+5fBT/xZxA//3////+/v7/+//6//3////au4T/0rJw//v/
///8/v7///////r//f/+9u///f/+///+/f+5gRL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4fxb/uH4V/7h+
Ff+2fxD/wJEv//7+/v/////////8/8CNL/+4fhX/3bqC//79///8/v//8+TR/7Z+E//Io0////////z/
/f/cvYD/tX8U/+fSsv///v///////8qhUv+6fhT/2LJy//z+///7//7/8+bQ/7l+EP+0fxH/27uA///+
//////7/zKFQ/7yAFv/49uz///7///7+/v+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3gBH/uIAR/7d/
Ev+2fhH/wo8z/////v/9//7/+////8OQMv+0fxH/zaJR//r//v/+/v7//f///7p/Ev+7hyL//P7+////
///bwZL/t4EP/+DKoP/8//3//////8yhUv+0fxH/1rNx//z//f/9////4cuh/7d/FP+4gBH/zaph////
/v/+/v7/zqti/7R/Ef/27eD///////v///+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8S/7d/
Ev+4fxL/wI8z/////////////////8CQMf+4fxL/yaBR//z+/v///v7//////7d/Ev+2fhP/y6hk///+
//////7/1Lp+/+TNn//+/v7//v7+/8yhUP+3fxT/1LJw//79////////4sue/7d/Ev+3gBH/uH8S/9nC
kv/9//7/+fbx/8+qYP/27d/////8//////+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8S/7d/
Ev+4fxL/wI8z/////////////////8CQMf+4fxL/y6JT/////////////////7d/Ev+3fxL/toAN/8OQ
NP/Zu4L///7////+///8/v///////8ahUf+4fhT/07Vu//v//v/+/v7/48uh/7WAEf+2fhP/t38S/7h/
Ev/MoVD/5Mye//z+/v///f///P/9//////+3gBH/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8S/7d/
Ev+4fxL/wI8z/////////////////8KQMP+6gRT/yaBR//3////////////+/7Z+Ef/Aih//2r2A/9u6
gv/SsnD/soAQ/+PMnv/9/////P/9/8yhUv+3fxT/17Fx///+///+/v7/3sue/7h+FP+3fxT/x5lB/9q8
gf/ZvH//yKFT/7V/FP/27+D///////3///+4fhT/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8S/7d/
Ev+4fxL/wI8z/////////////////8GRMf+3fhH/y6NR//7+/v/+//3//v7+/7d/Ev+3fRP//PXy//3/
///y59H/t30T/+rUsf/+/v7////+/7+QNf+4fxL/07Bx//z+////////5c6g/7Z+Ef+4gBH/xplC//7+
/v/+/v7/3sOR/7l+Ef/79u3////8//Xu3/+4gA//t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8S/7d/
Ev+4fxL/wI8z/////////////////8GRMv+4fxL/x6FP/////////////////7eAEf+4fxL/48yf//3/
///+/v7///////z//f//////9e7d/7d/EP/Zu4D//f/8///+/f////7//////////v/KoFP/t38S//Pu
3////v//////////+/////z//f78/+LKoP+4gBH/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8S/7d/
Ev+4fxL/wI8z/////////////////8KPMf+6fxL/yqJQ/////v/+/f///v7+/7aBE/+1gBL/uIAR/9e6
ff///////P/9//7+/v/p3cH/wZEy/7qAD//Zu4D/+////////v/9/////f/////9///JoU//uIAR/8KQ
MP/dzZ/////+/////v//////4syi/7aBE/+0fxD/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8S/7d/
Ev+4fxL/wI8z/////////////////8CQMf+4fxL/yKBV//39/f///v/////7/7d/Ev+3fxL/t38U/7d/
Ev+4fxb/tn4T/7qCE/+2fxD/t4EP/7h/Ev+3fxL/1rJy//3/////////48ye/7aADv+3gBH/tn4T/7l/
Ff+6fxL/t38U/7h/Ev+3fxL/t34R/7l+Ef+4fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uH8S/7d/
Ev+4fxL/wI8z/////////////////8CQMP+1fxT/2buC//3//v///P//7+fQ/7l+EP+4fhT/t4AR/7WA
Ev+6fxL/s4ER/7t9Ef+4gBP/t4EP/7d+Ff+1gBL/1bJw//3//v/9////4M2i/7h/Ev+2fhP/t38Q/7h+
FP+zgg7/t34V/7p/Ef+3gBH/t38S/7p+FP+3gBH/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fhH/uIAP/7WA
Ev+3fxT/wo8z///////////////////////+//3//f///////v////7/zqpk/7h9D/+1fhX/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxT/1LNu//3////9////4syj/7h+FP+8fxH/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+1fxT/t38S/7d/
FP+4fxL/wJAx//3//v/9//7////////////9///////8/+HLov/KoFP/tn4R/7mBEv+6gQ7/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+yfhP/vYEQ/7d/EP+5fxX/t38S/7p/Ef+3fxL/t38U/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fRP/uYES/7eB
D/+yfxH/uX8V/7x/Ef+2fhP/t38U/7iAEf+3fxT/tn4T/7iAEf+1fRL/uIAT/7Z+Ef+5fxX/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/uXwU/7p/Ev+1fRD/t4AR/7d/Ev+3gBH/tn4R/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2fhH/t38S/7h+
FP+4gBH/t38S/7p/Ev+3gBH/uH4U/7iAEf+2fhH/t4AR/7d/EP+4fhT/tH8R/7WAEf+4fhT/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2fxD/t30T/7Z+E/+3gQ//t38U/7d/Ev+2fhH/t34R/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2fxD/uH4U/7eA
Ef+2fhH/uIAT/7N+D/+2fhH/tYAS/7h/Ev+9gBL/tn4P/7WAEv+3gQ//u34Q/7h/Ev+2gRL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+1gBH/toES/7eAEf+8fxH/t38U/7Z+E/+3fxT/vH4S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4gBH/tn4R/7h/
Ev+5fhH/tn0Q/7l/Ff+4gRL/vH4S/7WAEf+yfhP/uYEW/7t9E/+zgBL/tn4R/7p/Ev+4fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev++fBX/uX4R/7d+Ef+5gRL/tH8R/7eAEf+3fxL/uH8S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+2fxD/un4U/7WA
Ev+3fxL/vIEU/7R/EP+3fRP/tYAS/7aAFf+3fhH/uIAR/7d+Ef+1gQ//uIAR/7iAEf+3fxT/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+0fxD/tYAS/7V+Fv+2fhP/toAV/7d/Dv+2fg//tYAS/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38U/7d/
Ev+1gBL/uX4Q/7iBEv+2fhP/uH8S/7eBD/+5fxX/t38Q/7iAE/+yfxH/uX8W/7p/Ef+3gBH/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+4gA//tn4T/7d/Ev+6gA//tYAS/7h/Ev+5gBP/t34V/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/Ev+3fxL/t38S/7d/
Ev+3fxL/t38S/7d/Ev+3fxL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAA
</value>
</data>
</root>

View File

@@ -0,0 +1,39 @@
using System;
using System.Security.Principal;
using System.Threading;
using System.Windows.Forms;
namespace LocalSQLDB
{
class LocalDBPreparation
{
static void Main(string[] args)
{
var targetDir = string.Empty;
Version productVersion = new Version();
for (var i = 0; i < args.Length; i++)
{
switch (i)
{
case 0:
targetDir = args[i];
break;
case 1:
productVersion = new Version(args[i]);
break;
}
}
try
{
var localDBPrepare = new LocalDBPrepare(targetDir, productVersion);
localDBPrepare.PrepareDB();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + " - Installation will be cancelled");
throw new Exception();
}
}
}
}

View File

@@ -0,0 +1,201 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{4C8891C6-24A7-47D8-8AAD-CEF2243A6202}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>DBConfiguration</RootNamespace>
<AssemblyName>DBConfiguration</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<SccProjectName>
</SccProjectName>
<SccLocalPath>
</SccLocalPath>
<SccAuxPath>
</SccAuxPath>
<SccProvider>
</SccProvider>
<TargetFrameworkProfile />
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x64\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<OutputPath>bin\x64\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x64</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\x86\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
<Prefer32Bit>true</Prefer32Bit>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Data.SQLite">
<HintPath>..\..\..\..\Common\DTS.Common\lib\System.Data.SQLite.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="CommonUtilities.cs" />
<Compile Include="DBTypeChoice.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="DBTypeChoice.Designer.cs">
<DependentUpon>DBTypeChoice.cs</DependentUpon>
</Compile>
<Compile Include="DBConfig.cs" />
<Compile Include="MigrationStatus.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="DBTypeChoice.resx">
<DependentUpon>DBTypeChoice.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<None Include="App.config">
<SubType>Designer</SubType>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\..\Common\DTS.Common.Storage\DTS.Common.Storage.csproj">
<Project>{e3be457c-0ac7-4a9c-bc81-eafeb3217878}</Project>
<Name>DTS.Common.Storage</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Common\DTS.Common.Utilities\DTS.Common.Utilities.csproj">
<Project>{d6da1b74-c711-43c2-91b1-1908a8d04dbf}</Project>
<Name>DTS.Common.Utilities</Name>
</ProjectReference>
<ProjectReference Include="..\..\..\..\Common\DTS.Common\DTS.Common.csproj">
<Project>{f7a0804f-61a4-40ae-83d0-f1137622b592}</Project>
<Name>DTS.Common</Name>
</ProjectReference>
<ProjectReference Include="..\..\DatabaseImporter\ConfigToDb\ConfigToDb.csproj">
<Project>{98a0afb3-7bbf-4e43-8c5b-552d69c8d3a9}</Project>
<Name>ConfigToDb</Name>
</ProjectReference>
<ProjectReference Include="..\..\DatabaseImporter\DatabaseImport\DatabaseImport.csproj">
<Project>{00b5442e-2279-47ae-8015-6db0ffeb6d88}</Project>
<Name>DatabaseImport</Name>
</ProjectReference>
<ProjectReference Include="..\..\PreviousDBVersions\Version57\DatabaseExport\DatabaseExport.csproj">
<Project>{0e52df76-b8a7-4c69-981c-cdc27b7ee5a9}</Project>
<Name>DatabaseExport</Name>
</ProjectReference>
<ProjectReference Include="..\Common\Installer.Common.csproj">
<Project>{7a025307-d06e-48ff-a443-dcd16530a6dd}</Project>
<Name>Installer.Common</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include=".NETFramework,Version=v4.5.2">
<Visible>False</Visible>
<ProductName>Microsoft .NET Framework 4.5.2 %28x86 and x64%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>if not exist "db" mkdir "db"
copy /y "$(SolutionDir)\..\Common\DTS.Common.Storage\DataPRO.mdf" "db\DataPROBlank.mdf"
copy /y "$(SolutionDir)\..\Common\DTS.Common.Storage\DataPRO_log.ldf" "db\DataPROBlank_log.ldf"
call $(SolutionDir)RobocopyWrapper.bat "$(SolutionDir)\..\Common\DTS.Common.Storage" "db" "mdf"
call $(SolutionDir)RobocopyWrapper.bat "$(SolutionDir)\..\Common\DTS.Common.Storage" "db" "ldf"
if not exist "ISO" mkdir "ISO"
call $(SolutionDir)RobocopyWrapper.bat "$(SolutionDir)\..\Common\DTS.Common.ISO\DBFiles" "ISO" "mdb"
if not exist "SQL Server Scripts" mkdir "SQL Server Scripts"
call $(SolutionDir)RobocopyWrapper.bat "$(SolutionDir)\..\Common\DTS.Common.Storage" "SQL Server Scripts" "sql"
call $(SolutionDir)RobocopyWrapper.bat "$(SolutionDir)\..\Common\DTS.Common.Storage" "SQL Server Scripts" "bat"
copy /y "$(SolutionDir)\..\DataPRO\SQLiteInterop\$(Platform)\SQLite.Interop.dll"
</PostBuildEvent>
</PropertyGroup>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("DBConfiguration")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("DBConfiguration")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("a5087f45-0949-4e27-b367-ccb6556fc68d")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,21 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="RegAddProductCode.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="InstallerKey" Type="System.String" Scope="Application">
<Value Profile="(Default)">SOFTWARE\\Policies\\Microsoft\\Windows\\Installer</Value>
</Setting>
<Setting Name="MissingKey" Type="System.String" Scope="Application">
<Value Profile="(Default)">No key at {0}</Value>
</Setting>
<Setting Name="ProductCode" Type="System.String" Scope="Application">
<Value Profile="(Default)">{C4889149-0CAF-44C1-B226-8F6E73684DF4}</Value>
</Setting>
<Setting Name="SecureRepairPolicy" Type="System.String" Scope="Application">
<Value Profile="(Default)">SecureRepairPolicy</Value>
</Setting>
<Setting Name="SecureRepairWhitelistKey" Type="System.String" Scope="Application">
<Value Profile="(Default)">SOFTWARE\\Policies\\Microsoft\\Windows\\Installer\\SecureRepairWhitelist</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Installer.Common")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Installer.Common")]
[assembly: AssemblyCopyright("Copyright © 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("7a025307-d06e-48ff-a443-dcd16530a6dd")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="RegAddProductCode.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</sectionGroup>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8"/>
</startup>
<applicationSettings>
<RegAddProductCode.Properties.Settings>
<setting name="InstallerKey" serializeAs="String">
<value>SOFTWARE\\Policies\\Microsoft\\Windows\\Installer</value>
</setting>
<setting name="MissingKey" serializeAs="String">
<value>No key at {0}</value>
</setting>
<setting name="ProductCode" serializeAs="String">
<value>{C4889149-0CAF-44C1-B226-8F6E73684DF4}</value>
</setting>
<setting name="SecureRepairPolicy" serializeAs="String">
<value>SecureRepairPolicy</value>
</setting>
<setting name="SecureRepairWhitelistKey" serializeAs="String">
<value>SOFTWARE\\Policies\\Microsoft\\Windows\\Installer\\SecureRepairWhitelist</value>
</setting>
</RegAddProductCode.Properties.Settings>
</applicationSettings>
</configuration>

View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="Common.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="Installer.Common.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/></startup>
<applicationSettings>
<Common.Properties.Settings>
<setting name="RegistrySoftwareInstalledProducts" serializeAs="String">
<value>SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products</value>
</setting>
<setting name="RegistryInstallProperties" serializeAs="String">
<value>InstallProperties</value>
</setting>
<setting name="RegistryDisplayName" serializeAs="String">
<value>DisplayName</value>
</setting>
<setting name="RegistryDataPRO" serializeAs="String">
<value>DataPRO</value>
</setting>
<setting name="RegistryDisplayVersion" serializeAs="String">
<value>DisplayVersion</value>
</setting>
<setting name="RegistrySoftwareInstalledComponents" serializeAs="String">
<value>SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Components</value>
</setting>
<setting name="RegistryDataPROExeConfig" serializeAs="String">
<value>DataPRO.exe.config</value>
</setting>
<setting name="RegistryInstallLocation" serializeAs="String">
<value>InstallLocation</value>
</setting>
<setting name="DTSSuite" serializeAs="String">
<value>DTS.Suite</value>
</setting>
</Common.Properties.Settings>
<Installer.Common.Properties.Settings>
<setting name="RegistrySoftwareInstalledProducts" serializeAs="String">
<value>SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products</value>
</setting>
<setting name="RegistryInstallProperties" serializeAs="String">
<value>InstallProperties</value>
</setting>
<setting name="RegistryDisplayName" serializeAs="String">
<value>DisplayName</value>
</setting>
<setting name="RegistryDataPRO" serializeAs="String">
<value>DataPRO</value>
</setting>
<setting name="RegistryDisplayVersion" serializeAs="String">
<value>DisplayVersion</value>
</setting>
<setting name="RegistrySoftwareInstalledComponents" serializeAs="String">
<value>SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Components</value>
</setting>
<setting name="RegistryDataPROExeConfig" serializeAs="String">
<value>DataPRO.exe.config</value>
</setting>
</Installer.Common.Properties.Settings>
</applicationSettings>
</configuration>

View File

@@ -0,0 +1,33 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Common.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="RegistrySoftwareInstalledProducts" Type="System.String" Scope="Application">
<Value Profile="(Default)">SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Products</Value>
</Setting>
<Setting Name="RegistryInstallProperties" Type="System.String" Scope="Application">
<Value Profile="(Default)">InstallProperties</Value>
</Setting>
<Setting Name="RegistryDisplayName" Type="System.String" Scope="Application">
<Value Profile="(Default)">DisplayName</Value>
</Setting>
<Setting Name="RegistryDataPRO" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPRO</Value>
</Setting>
<Setting Name="RegistryDisplayVersion" Type="System.String" Scope="Application">
<Value Profile="(Default)">DisplayVersion</Value>
</Setting>
<Setting Name="RegistrySoftwareInstalledComponents" Type="System.String" Scope="Application">
<Value Profile="(Default)">SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Installer\\UserData\\S-1-5-18\\Components</Value>
</Setting>
<Setting Name="RegistryDataPROExeConfig" Type="System.String" Scope="Application">
<Value Profile="(Default)">DataPRO.exe.config</Value>
</Setting>
<Setting Name="RegistryInstallLocation" Type="System.String" Scope="Application">
<Value Profile="(Default)">InstallLocation</Value>
</Setting>
<Setting Name="DTSSuite" Type="System.String" Scope="Application">
<Value Profile="(Default)">DTS.Suite</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -0,0 +1,377 @@
using DTS.Common.Storage;
using DTS.Common.Enums;
using DBConfiguration.Properties;
using Microsoft.Win32;
using System.Diagnostics;
using System;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Configuration;
namespace DBConfiguration
{
public class CommonUtilities
{
public CommonUtilities()
{
log.Source = "DataPRODbMigratorInstaller";
}
private readonly EventLog log = new EventLog();
public void InitializeDbToTSRAIR(string targetDir)
{
var targetDbDir = $"{targetDir}\\{Settings.Default.LocalDbFolder}";
var scriptsDir = Path.Combine(targetDir, Settings.Default.ScriptsFolder);
DbOperations.Connection.DBName = "DataPRO"; //This cannot be changed during TSR AIR Go installation
UpdateTSRAIRAppSettings(targetDir);
var resultString = Attach(targetDbDir, scriptsDir);
DbOperations.Connection.Initialize(InitializationTypes.TSRAIR, targetDir);
_ = Detach(DbOperations.Connection.DBName, targetDbDir, scriptsDir);
MessageBox.Show(Settings.Default.TSRAIRGoInstallationCompletedSuccessfully,
Settings.Default.InstallationStatus,
MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1,
MessageBoxOptions.DefaultDesktopOnly);
}
private void UpdateTSRAIRAppSettings(string targetDir)
{
try
{
if (!GetNewSettings(Settings.Default.ApplicationSettings, targetDir, out var result, out var settings, out var config))
{
log.WriteEntry($"failed to updatetsrairappsetting {result}");
}
var setting = settings.Get("LaunchTSRAIRGo");
settings.Remove(setting);
setting.Value.ValueXml.InnerXml = "True";
settings.Add(setting);
config.Save(ConfigurationSaveMode.Full);
ConfigurationManager.RefreshSection("appSettings");
}
catch (Exception ex)
{
log.WriteEntry($"Failed to update tsr air app settings {ex.Message}");
//nothing to do right now
}
}
public bool GetNewSettings(string settingsType, string targetDir,
out string result, out SettingElementCollection newSettings, out Configuration newConfig)
{
result = string.Empty;
newSettings = null;
newConfig = null;
var newPath = string.Empty;
try
{
//Open the new config file just installed
newPath = Path.Combine(targetDir, Settings.Default.RegistryDataPROExe);
newConfig = ConfigurationManager.OpenExeConfiguration(@newPath);
}
catch (Exception ex)
{
result = string.Format(Settings.Default.NewSettingsCouldNotBeFound, ex.Message, newPath);
return false;
}
newSettings = GetConfigSettings(settingsType, newConfig);
if (newSettings != null) return true;
result = Settings.Default.NewSettingsCouldNotBeProcessed;
return false;
}
private static SettingElementCollection GetConfigSettings(string settingsType, Configuration config)
{
var clientSettingsSection = new ClientSettingsSection();
var configurationSectionGroup = config.SectionGroups[settingsType];
if ((configurationSectionGroup != null) && (configurationSectionGroup.Sections[0] != null))
{
clientSettingsSection = configurationSectionGroup.Sections[0] as ClientSettingsSection;
}
return clientSettingsSection?.Settings;
}
public string Attach(string targetDbDir, string scriptsDir)
{
log.WriteEntry(Settings.Default.AttachingPrevLocalDb);
SetMigrationStatus(Settings.Default.AttachingPrevLocalDb);
var resultString = InstallDatabase(targetDbDir, DbOperations.Connection.DBName, scriptsDir);
return resultString;
}
public string InstallDatabase(string dBdir, string dbName, string scriptsDir)
{
string resultString = "";
try
{
DbOperations._usingCentralizedDB = false;
DbOperations._usingMSSQL = true;
DbOperations.Connection.Server = Settings.Default.LocalDbDataPROInstance;
DbOperations._usingNTLMAuthentication = true;
resultString = ProcessSqlLocalDbCommand(Settings.Default.StopDataProInstance);
if (resultString.Length != 0)
{
MessageBox.Show(resultString, Settings.Default.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
}
resultString = ProcessSqlLocalDbCommand(Settings.Default.DeleteDataProInstance);
if (resultString.Length != 0)
{
MessageBox.Show(resultString, Settings.Default.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
}
resultString = ProcessSqlLocalDbCommand(Settings.Default.CreateDataProInstance);
if (resultString.Length != 0)
{
MessageBox.Show(resultString, Settings.Default.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
}
resultString = ProcessSqlLocalDbCommand(Settings.Default.StartDataProInstance);
if (resultString.Length != 0)
{
MessageBox.Show(resultString, Settings.Default.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
}
Console.WriteLine("Attaching DataPRO");
//Attach the DataPRO database
var dbFileName = Path.Combine(dBdir, dbName) + Settings.Default.Mdf;
var logFileName = Path.Combine(dBdir, dbName) + Settings.Default.LogLdf;
Console.WriteLine($"dbFileName is {dbFileName}");
Console.WriteLine($"logFileName is {logFileName}");
Console.WriteLine($"_scriptsDir is {scriptsDir}");
resultString = AttachOrDetachDatabase(scriptsDir, dbName, dbFileName, logFileName, Settings.Default.AttachDBsbat);
if (resultString.Length != 0)
{
MessageBox.Show(resultString, Settings.Default.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
}
Console.WriteLine("Attaching ISO");
//Attach the ISO database
dbFileName = Path.Combine(dBdir, Settings.Default.ISO) + Settings.Default.Mdf;
logFileName = Path.Combine(dBdir, Settings.Default.ISO) + Settings.Default.LogLdf;
resultString = AttachOrDetachDatabase(scriptsDir, Settings.Default.ISO, dbFileName, logFileName, Settings.Default.AttachDBsbat);
if (resultString.Length != 0)
{
MessageBox.Show(resultString, Settings.Default.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
}
}
catch (Exception ex)
{
log.WriteEntry($"Exception while getting previous local database version: {ex.Message}; Stacktrace: {ex.StackTrace}");
throw;
}
return resultString;
}
public string Detach(string sourceDbName, string targetDbDir, string scriptsDir)
{
//Detach the databases
log.WriteEntry(string.Format(Settings.Default.DetachingLocalMigratedDb, sourceDbName));
SetMigrationStatus(string.Format(Settings.Default.DetachingLocalMigratedDb, sourceDbName));
var dbFileName = Path.Combine(targetDbDir, sourceDbName + Settings.Default.Mdf);
var logFileName = Path.Combine(targetDbDir, sourceDbName + Settings.Default.LogLdf);
var resultString = CommonUtilities.AttachOrDetachDatabase(scriptsDir, sourceDbName, dbFileName, logFileName, Settings.Default.DetachDBsbat);
if (resultString.Length != 0)
{
MessageBox.Show(resultString, Settings.Default.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning,
MessageBoxDefaultButton.Button2, MessageBoxOptions.DefaultDesktopOnly);
}
log.WriteEntry(Settings.Default.DetachingLocalISODb);
SetMigrationStatus(Settings.Default.DetachingLocalISODb);
dbFileName = Path.Combine(targetDbDir, Settings.Default.ISO + Settings.Default.Mdf);
logFileName = Path.Combine(targetDbDir, Settings.Default.ISO + Settings.Default.LogLdf);
resultString = CommonUtilities.AttachOrDetachDatabase(scriptsDir, Settings.Default.ISO, dbFileName, logFileName, Settings.Default.DetachDBsbat);
return resultString;
}
public MigrationStatus SetMigrationStatus(string migrationStatus, bool output = false)
{
//Remove the previous status
SetStatus(string.Empty);
var migrationStatusClass = new MigrationStatus();
migrationStatusClass.StatusType = MigrationStatus.StatusTypes.MigrationStatus;
migrationStatusClass.StatusText = migrationStatus;
if (output)
{
Console.WriteLine(migrationStatus);
}
return migrationStatusClass;
}
private void SetStatus(string status, bool output = false)
{
var migrationStatusClass = new MigrationStatus();
migrationStatusClass.StatusType = MigrationStatus.StatusTypes.Status;
migrationStatusClass.StatusText = status;
if (output)
{
Console.WriteLine(status);
}
}
/// <summary>
/// Get the path to the latest version of SQL Server Express LocalDB
/// installed, and run the command passed in.
/// </summary>
/// <param name="command"></param>
/// <returns></returns>
public string ProcessSqlLocalDbCommand(string command)
{
//SQL Server Express LocalDB 2014 is a Prerequisite of the DataPRO Installer,
//so it should be there unless it has been subsequently uninstalled.
var localDbPath = GetSqlServerLocalDBPath();
if (localDbPath == string.Empty)
{
log.WriteEntry($"localDbPath is empty");
//SQL Server LocalDb is not installed so display error and go away
return Settings.Default.SqlServerLocalDbNotInstalled;
}
var sqlLocalDbExeFileName = localDbPath + Settings.Default.SqlLocalDBExe;
log.WriteEntry($"sqlLocalDbExeFileName = {sqlLocalDbExeFileName}");
return SqlCommandProcessor(sqlLocalDbExeFileName, command);
}
public static string AttachOrDetachDatabase(string scriptsDir, string dbName, string sqlDbFileName, string sqlLogFileName, string attachOrDetach)
{
const string SqlCmdExe = "sqlcmd.exe";
var oDBCToolsPath = DTS.Common.Utils.Database.GetODBCToolsPath(null);
var fullSqlcmdPath = Path.Combine(oDBCToolsPath, SqlCmdExe); //e.g. $"\"C:\\Program Files\\Microsoft SQL Server\\Client SDK\\ODBC\\110\\Tools\\Binn\\sqlcmd.exe\""
var batchFileName = Path.Combine(scriptsDir, attachOrDetach);
return BatchCommandProcessor(batchFileName, dbName, sqlDbFileName, sqlLogFileName, fullSqlcmdPath);
}
private string GetSqlServerLocalDBPath()
{
var highestVersionInstalledPath = string.Empty;
var rk = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
var sk1 = rk.OpenSubKey(Settings.Default.RegistrySoftwareMicrosoftMicrosoftSQLServerLocalDBInstalledVersions);
if (sk1 == null)
{
log.WriteEntry($"sk1 is null; returning string.Empty");
return string.Empty;
}
var maxProductVersion = 0.0;
foreach (var productSubKeyName in sk1.GetSubKeyNames())
{
log.WriteEntry($"productSubKeyName is {productSubKeyName}");
var thisVersion = -1D;
if (!double.TryParse(productSubKeyName,
System.Globalization.NumberStyles.Float | System.Globalization.NumberStyles.AllowThousands,
System.Globalization.CultureInfo.InvariantCulture,
out thisVersion)) continue;
log.WriteEntry($"thisVersion is {thisVersion}/maxProductVersion is {maxProductVersion}");
if (thisVersion < maxProductVersion) continue;
maxProductVersion = thisVersion;
var newKey = sk1.OpenSubKey(productSubKeyName);
if (newKey == null)
{
log.WriteEntry($"newKey is null (productSubKeyName is {productSubKeyName}); continuing");
continue;
}
var val = newKey.GetValue(Settings.Default.InstanceAPIPath, -1, RegistryValueOptions.None).ToString();
log.WriteEntry($"val is {val}");
if ((val == "-1") || (!val.EndsWith(Settings.Default.SqlUserInstanceDll))) continue;
log.WriteEntry($"highestVersionInstalledPath = {highestVersionInstalledPath}");
highestVersionInstalledPath = val.Substring(0, val.Length - Settings.Default.SqlUserInstanceDll.Length);
}
log.WriteEntry($"Returning {highestVersionInstalledPath.Replace(Settings.Default.LocalDB, Settings.Default.Tools)}");
return highestVersionInstalledPath.Replace(Settings.Default.LocalDB, Settings.Default.Tools);
}
public static StringBuilder sb = new StringBuilder();
public static void OutputHandler(object sendingProcess, DataReceivedEventArgs outLine)
{
if (outLine.Data != null)
{
if (string.IsNullOrWhiteSpace(outLine.Data))
{
sb.Append(Environment.NewLine);
}
sb.Append(outLine.Data);
}
}
public static string SqlCommandProcessor(string sqlLocalDbExeFileName, string command)
{
var resultString = string.Empty;
sb.Clear();
var process = new Process
{
StartInfo =
{
FileName = sqlLocalDbExeFileName,
Arguments = command,
LoadUserProfile = true,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
};
//* Set ONLY ONE handler here.
process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
//* Start process
process.Start();
//* Read one element asynchronously
process.BeginErrorReadLine();
//* Read the other one synchronously
var output = process.StandardOutput.ReadToEnd();
Console.WriteLine(output);
process.WaitForExit();
if (sb.Length > 0)
{
resultString = sb.ToString();
}
return resultString;
}
public static string BatchCommandProcessor(string batchFileName, string dbName, string sqlDbFileName, string sqlLogFileName,
string fullSqlcmdPath)
{
var resultString = string.Empty;
sb.Clear();
var process = new Process
{
StartInfo =
{
FileName = batchFileName,
Arguments = dbName + " " + "\"" + sqlDbFileName + "\"" + " " + "\"" + sqlLogFileName + "\"" + " " + "\"" + fullSqlcmdPath + "\"",
LoadUserProfile = true,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
}
};
//* Set ONLY ONE handler here.
process.OutputDataReceived += new DataReceivedEventHandler(OutputHandler);
//* Start process
process.Start();
//* Read one element asynchronously
process.BeginErrorReadLine();
//* Read the other one synchronously
var output = process.StandardOutput.ReadToEnd();
Console.WriteLine(output);
process.WaitForExit();
if (sb.Length > 0)
{
resultString = sb.ToString();
}
return resultString;
}
}
}

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace OpenFolder
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,112 @@
//#define DEBUG
using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace DBConfiguration
{
static class DBConfig
{
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
const int SW_HIDE = 0;
const int SW_SHOW = 5;
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
var targetDir = string.Empty;
var productVersion = new Version();
var noUI = string.Empty;
var architectureVersion = string.Empty;
var sourcePath = string.Empty;
var destPath = string.Empty;
var handle = GetConsoleWindow();
var tsrAirGo = false;
#if DEBUG
//To enable this section, check the "Define DEBUG constant" checkbox in the Build
//step of the Properties of the DBConfiguration project.
//this should be a real version installed on your system.
//it is what we are simulating migrating *to*, so install it with the migration check off
//if you are testing *from*, make sure to have a previous and in-the-registry copy as well
var _majorMinorVersion = "4.4.309";
var version = _majorMinorVersion + ".52976";
targetDir = "D:\\DTS\\DTS.Suite\\" + _majorMinorVersion + "\\DataPRO";
productVersion = new Version(version);
//Use this to test the TSR AIR Go installer
tsrAirGo = true;
#else
if (args.Length == 0)
{
//Don't display the command prompt window while processing (but see below)
ShowWindow(handle, SW_HIDE);
noUI = "STANDALONE";
}
else if (args.Length == 2)
{
//Display the command prompt window during and after processing.
ShowWindow(handle, SW_SHOW);
noUI = "STANDALONECMD";
sourcePath = args[0];
destPath = args[1];
}
else
{
//Don't display the command prompt window while processing from installer.
ShowWindow(handle, SW_HIDE);
for (var i = 0; i < args.Length; i++)
{
switch (i)
{
case 0:
targetDir = args[i];
break;
case 1:
productVersion = new Version(args[i]);
break;
case 2:
noUI = args[i];
break;
case 3:
if (bool.TryParse(args[i], out var b))
{
tsrAirGo = b;
}
break;
}
}
}
#endif
if (noUI != "TRUE")
{
if (tsrAirGo)
{
var commonUtilities = new CommonUtilities();
commonUtilities.InitializeDbToTSRAIR(targetDir);
}
else
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new DBTypeChoice(targetDir, productVersion, noUI, sourcePath, destPath));
if (args.Length == 0)
{
//If run in a command prompt window, don't close (the window will
//flash briefly if run by double-clicking DBConfiguration.exe).
ShowWindow(handle, SW_SHOW);
}
}
}
}
}
}

View File

@@ -0,0 +1,55 @@
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("WarnWindows11")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("WarnWindows11")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
//In order to begin building localizable applications, set
//<UICulture>CultureYouAreCodingWith</UICulture> in your .csproj file
//inside a <PropertyGroup>. For example, if you are using US english
//in your source files, set the <UICulture> to en-US. Then uncomment
//the NeutralResourceLanguage attribute below. Update the "en-US" in
//the line below to match the UICulture setting in the project file.
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,9 @@
<Application x:Class="OpenFolder.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:OpenFolder"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>

View File

@@ -0,0 +1,463 @@
namespace DBConfiguration
{
partial class DBTypeChoice
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(DBTypeChoice));
this.lblSelectType = new System.Windows.Forms.Label();
this.rbLocal = new System.Windows.Forms.RadioButton();
this.rbCentralized = new System.Windows.Forms.RadioButton();
this.groupBox1 = new System.Windows.Forms.GroupBox();
this.rbBoth = new System.Windows.Forms.RadioButton();
this.lblDBHostname = new System.Windows.Forms.Label();
this.lblDBPassword = new System.Windows.Forms.Label();
this.lblDBName = new System.Windows.Forms.Label();
this.tbDBHostname = new System.Windows.Forms.TextBox();
this.tbDBPassword = new System.Windows.Forms.TextBox();
this.tbDBName = new System.Windows.Forms.TextBox();
this.btnOK = new System.Windows.Forms.Button();
this.cbShowPassword = new System.Windows.Forms.CheckBox();
this.cbUseNTLMAuthentication = new System.Windows.Forms.CheckBox();
this.lblDBUser = new System.Windows.Forms.Label();
this.tbDBUser = new System.Windows.Forms.TextBox();
this.btnCancel = new System.Windows.Forms.Button();
this.btnBrowseDestinationDB = new System.Windows.Forms.Button();
this.tbDestinationDB = new System.Windows.Forms.TextBox();
this.lblDestinationDB = new System.Windows.Forms.Label();
this.btnBrowseSourceDB = new System.Windows.Forms.Button();
this.tbSourceDB = new System.Windows.Forms.TextBox();
this.lblSourceDB = new System.Windows.Forms.Label();
this.gbMigrateOrInit = new System.Windows.Forms.GroupBox();
this.rbNoneOfTheAbove = new System.Windows.Forms.RadioButton();
this.rbTSRAIR = new System.Windows.Forms.RadioButton();
this.rbCrash = new System.Windows.Forms.RadioButton();
this.rbAero = new System.Windows.Forms.RadioButton();
this.rbMigrateLocal = new System.Windows.Forms.RadioButton();
this.cbCopyConfig = new System.Windows.Forms.CheckBox();
this.groupBox1.SuspendLayout();
this.gbMigrateOrInit.SuspendLayout();
this.SuspendLayout();
//
// lblSelectType
//
this.lblSelectType.AutoSize = true;
this.lblSelectType.Location = new System.Drawing.Point(24, 28);
this.lblSelectType.Name = "lblSelectType";
this.lblSelectType.Size = new System.Drawing.Size(227, 13);
this.lblSelectType.TabIndex = 0;
this.lblSelectType.Text = "The following database properties will be used:";
//
// rbLocal
//
this.rbLocal.AutoSize = true;
this.rbLocal.Location = new System.Drawing.Point(12, 19);
this.rbLocal.Name = "rbLocal";
this.rbLocal.Size = new System.Drawing.Size(98, 17);
this.rbLocal.TabIndex = 1;
this.rbLocal.Text = "Local database";
this.rbLocal.UseVisualStyleBackColor = true;
this.rbLocal.CheckedChanged += new System.EventHandler(this.rbLocal_CheckedChanged);
//
// rbCentralized
//
this.rbCentralized.AutoSize = true;
this.rbCentralized.Location = new System.Drawing.Point(11, 51);
this.rbCentralized.Name = "rbCentralized";
this.rbCentralized.Size = new System.Drawing.Size(124, 17);
this.rbCentralized.TabIndex = 2;
this.rbCentralized.Text = "Centralized database";
this.rbCentralized.UseVisualStyleBackColor = true;
this.rbCentralized.CheckedChanged += new System.EventHandler(this.rbCentralized_CheckedChanged);
//
// groupBox1
//
this.groupBox1.Controls.Add(this.rbBoth);
this.groupBox1.Controls.Add(this.rbCentralized);
this.groupBox1.Controls.Add(this.rbLocal);
this.groupBox1.Location = new System.Drawing.Point(27, 53);
this.groupBox1.Name = "groupBox1";
this.groupBox1.Size = new System.Drawing.Size(145, 106);
this.groupBox1.TabIndex = 3;
this.groupBox1.TabStop = false;
//
// rbBoth
//
this.rbBoth.AutoSize = true;
this.rbBoth.Location = new System.Drawing.Point(12, 83);
this.rbBoth.Name = "rbBoth";
this.rbBoth.Size = new System.Drawing.Size(47, 17);
this.rbBoth.TabIndex = 3;
this.rbBoth.TabStop = true;
this.rbBoth.Text = "Both";
this.rbBoth.UseVisualStyleBackColor = true;
this.rbBoth.CheckedChanged += new System.EventHandler(this.rbBoth_CheckedChanged);
//
// lblDBHostname
//
this.lblDBHostname.AutoSize = true;
this.lblDBHostname.Location = new System.Drawing.Point(57, 174);
this.lblDBHostname.Name = "lblDBHostname";
this.lblDBHostname.Size = new System.Drawing.Size(105, 13);
this.lblDBHostname.TabIndex = 7;
this.lblDBHostname.Text = "Database hostname:";
//
// lblDBPassword
//
this.lblDBPassword.AutoSize = true;
this.lblDBPassword.Location = new System.Drawing.Point(77, 333);
this.lblDBPassword.Name = "lblDBPassword";
this.lblDBPassword.Size = new System.Drawing.Size(104, 13);
this.lblDBPassword.TabIndex = 8;
this.lblDBPassword.Text = "Database password:";
//
// lblDBName
//
this.lblDBName.AutoSize = true;
this.lblDBName.Location = new System.Drawing.Point(57, 218);
this.lblDBName.Name = "lblDBName";
this.lblDBName.Size = new System.Drawing.Size(85, 13);
this.lblDBName.TabIndex = 9;
this.lblDBName.Text = "Database name:";
//
// tbDBHostname
//
this.tbDBHostname.Location = new System.Drawing.Point(60, 190);
this.tbDBHostname.Name = "tbDBHostname";
this.tbDBHostname.Size = new System.Drawing.Size(389, 20);
this.tbDBHostname.TabIndex = 10;
this.tbDBHostname.TextChanged += new System.EventHandler(this.tbDBHostname_TextChanged);
//
// tbDBPassword
//
this.tbDBPassword.Location = new System.Drawing.Point(80, 349);
this.tbDBPassword.Name = "tbDBPassword";
this.tbDBPassword.Size = new System.Drawing.Size(365, 20);
this.tbDBPassword.TabIndex = 11;
this.tbDBPassword.TextChanged += new System.EventHandler(this.tbDBPassword_TextChanged);
//
// tbDBName
//
this.tbDBName.Location = new System.Drawing.Point(60, 234);
this.tbDBName.Name = "tbDBName";
this.tbDBName.Size = new System.Drawing.Size(389, 20);
this.tbDBName.TabIndex = 12;
this.tbDBName.TextChanged += new System.EventHandler(this.tbDBName_TextChanged);
//
// btnOK
//
this.btnOK.Location = new System.Drawing.Point(98, 385);
this.btnOK.Name = "btnOK";
this.btnOK.Size = new System.Drawing.Size(95, 33);
this.btnOK.TabIndex = 13;
this.btnOK.Text = "OK";
this.btnOK.UseVisualStyleBackColor = true;
this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
//
// cbShowPassword
//
this.cbShowPassword.AutoSize = true;
this.cbShowPassword.Location = new System.Drawing.Point(344, 372);
this.cbShowPassword.Name = "cbShowPassword";
this.cbShowPassword.Size = new System.Drawing.Size(101, 17);
this.cbShowPassword.TabIndex = 14;
this.cbShowPassword.TabStop = false;
this.cbShowPassword.Text = "Show password";
this.cbShowPassword.UseVisualStyleBackColor = true;
this.cbShowPassword.CheckedChanged += new System.EventHandler(this.cbShowPassword_CheckedChanged);
//
// cbUseNTLMAuthentication
//
this.cbUseNTLMAuthentication.AutoSize = true;
this.cbUseNTLMAuthentication.Location = new System.Drawing.Point(60, 267);
this.cbUseNTLMAuthentication.Name = "cbUseNTLMAuthentication";
this.cbUseNTLMAuthentication.Size = new System.Drawing.Size(148, 17);
this.cbUseNTLMAuthentication.TabIndex = 15;
this.cbUseNTLMAuthentication.Text = "Use NTLM authentication";
this.cbUseNTLMAuthentication.UseVisualStyleBackColor = true;
this.cbUseNTLMAuthentication.CheckedChanged += new System.EventHandler(this.cbUseNTLMAuthentication_CheckedChanged);
//
// lblDBUser
//
this.lblDBUser.AutoSize = true;
this.lblDBUser.Location = new System.Drawing.Point(77, 287);
this.lblDBUser.Name = "lblDBUser";
this.lblDBUser.Size = new System.Drawing.Size(76, 13);
this.lblDBUser.TabIndex = 16;
this.lblDBUser.Text = "Database user";
//
// tbDBUser
//
this.tbDBUser.Location = new System.Drawing.Point(80, 303);
this.tbDBUser.Name = "tbDBUser";
this.tbDBUser.Size = new System.Drawing.Size(365, 20);
this.tbDBUser.TabIndex = 17;
this.tbDBUser.TextChanged += new System.EventHandler(this.tbDBUser_TextChanged);
//
// btnCancel
//
this.btnCancel.Location = new System.Drawing.Point(243, 385);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(95, 33);
this.btnCancel.TabIndex = 21;
this.btnCancel.Text = "Abort";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click);
//
// btnBrowseDestinationDB
//
this.btnBrowseDestinationDB.Location = new System.Drawing.Point(618, 279);
this.btnBrowseDestinationDB.Name = "btnBrowseDestinationDB";
this.btnBrowseDestinationDB.Size = new System.Drawing.Size(75, 23);
this.btnBrowseDestinationDB.TabIndex = 33;
this.btnBrowseDestinationDB.Text = "Browse...";
this.btnBrowseDestinationDB.UseVisualStyleBackColor = true;
this.btnBrowseDestinationDB.Visible = false;
this.btnBrowseDestinationDB.Click += new System.EventHandler(this.btnBrowseDestinationDB_Click_1);
//
// tbDestinationDB
//
this.tbDestinationDB.Location = new System.Drawing.Point(204, 279);
this.tbDestinationDB.Name = "tbDestinationDB";
this.tbDestinationDB.Size = new System.Drawing.Size(401, 20);
this.tbDestinationDB.TabIndex = 32;
this.tbDestinationDB.Visible = false;
this.tbDestinationDB.TextChanged += new System.EventHandler(this.tbDestinationDB_TextChanged_1);
//
// lblDestinationDB
//
this.lblDestinationDB.AutoSize = true;
this.lblDestinationDB.Location = new System.Drawing.Point(204, 262);
this.lblDestinationDB.Name = "lblDestinationDB";
this.lblDestinationDB.Size = new System.Drawing.Size(158, 13);
this.lblDestinationDB.TabIndex = 31;
this.lblDestinationDB.Text = "Local destination database path";
this.lblDestinationDB.Visible = false;
//
// btnBrowseSourceDB
//
this.btnBrowseSourceDB.Location = new System.Drawing.Point(618, 234);
this.btnBrowseSourceDB.Name = "btnBrowseSourceDB";
this.btnBrowseSourceDB.Size = new System.Drawing.Size(75, 23);
this.btnBrowseSourceDB.TabIndex = 30;
this.btnBrowseSourceDB.Text = "Browse...";
this.btnBrowseSourceDB.UseVisualStyleBackColor = true;
this.btnBrowseSourceDB.Visible = false;
this.btnBrowseSourceDB.Click += new System.EventHandler(this.btnBrowseSourceDB_Click_1);
//
// tbSourceDB
//
this.tbSourceDB.Location = new System.Drawing.Point(204, 234);
this.tbSourceDB.Name = "tbSourceDB";
this.tbSourceDB.Size = new System.Drawing.Size(401, 20);
this.tbSourceDB.TabIndex = 29;
this.tbSourceDB.Visible = false;
this.tbSourceDB.TextChanged += new System.EventHandler(this.tbSourceDB_TextChanged_1);
//
// lblSourceDB
//
this.lblSourceDB.AutoSize = true;
this.lblSourceDB.Location = new System.Drawing.Point(204, 218);
this.lblSourceDB.Name = "lblSourceDB";
this.lblSourceDB.Size = new System.Drawing.Size(185, 13);
this.lblSourceDB.TabIndex = 28;
this.lblSourceDB.Text = "Local source database to be migrated";
this.lblSourceDB.Visible = false;
//
// gbMigrateOrInit
//
this.gbMigrateOrInit.Controls.Add(this.cbCopyConfig);
this.gbMigrateOrInit.Controls.Add(this.rbNoneOfTheAbove);
this.gbMigrateOrInit.Controls.Add(this.rbTSRAIR);
this.gbMigrateOrInit.Controls.Add(this.rbCrash);
this.gbMigrateOrInit.Controls.Add(this.rbAero);
this.gbMigrateOrInit.Controls.Add(this.rbMigrateLocal);
this.gbMigrateOrInit.Location = new System.Drawing.Point(254, 28);
this.gbMigrateOrInit.Margin = new System.Windows.Forms.Padding(2);
this.gbMigrateOrInit.Name = "gbMigrateOrInit";
this.gbMigrateOrInit.Padding = new System.Windows.Forms.Padding(2);
this.gbMigrateOrInit.Size = new System.Drawing.Size(350, 149);
this.gbMigrateOrInit.TabIndex = 34;
this.gbMigrateOrInit.TabStop = false;
//
// rbNoneOfTheAbove
//
this.rbNoneOfTheAbove.AutoSize = true;
this.rbNoneOfTheAbove.Location = new System.Drawing.Point(12, 121);
this.rbNoneOfTheAbove.Margin = new System.Windows.Forms.Padding(2);
this.rbNoneOfTheAbove.Name = "rbNoneOfTheAbove";
this.rbNoneOfTheAbove.Size = new System.Drawing.Size(145, 17);
this.rbNoneOfTheAbove.TabIndex = 4;
this.rbNoneOfTheAbove.TabStop = true;
this.rbNoneOfTheAbove.Text = "Start with blank database";
this.rbNoneOfTheAbove.UseVisualStyleBackColor = true;
this.rbNoneOfTheAbove.CheckedChanged += new System.EventHandler(this.rbNoneOfTheAbove_CheckedChanged);
//
// rbTSRAIR
//
this.rbTSRAIR.AutoSize = true;
this.rbTSRAIR.Location = new System.Drawing.Point(12, 99);
this.rbTSRAIR.Margin = new System.Windows.Forms.Padding(2);
this.rbTSRAIR.Name = "rbTSRAIR";
this.rbTSRAIR.Size = new System.Drawing.Size(206, 17);
this.rbTSRAIR.TabIndex = 3;
this.rbTSRAIR.TabStop = true;
this.rbTSRAIR.Text = "Initialize database to TSR AIR settings";
this.rbTSRAIR.UseVisualStyleBackColor = true;
this.rbTSRAIR.CheckedChanged += new System.EventHandler(this.rbTSRAIR_CheckedChanged);
//
// rbCrash
//
this.rbCrash.AutoSize = true;
this.rbCrash.Location = new System.Drawing.Point(12, 77);
this.rbCrash.Margin = new System.Windows.Forms.Padding(2);
this.rbCrash.Name = "rbCrash";
this.rbCrash.Size = new System.Drawing.Size(190, 17);
this.rbCrash.TabIndex = 2;
this.rbCrash.TabStop = true;
this.rbCrash.Text = "Initialize database to Crash settings";
this.rbCrash.UseVisualStyleBackColor = true;
this.rbCrash.CheckedChanged += new System.EventHandler(this.rbCrash_CheckedChanged);
//
// rbAero
//
this.rbAero.AutoSize = true;
this.rbAero.Location = new System.Drawing.Point(12, 55);
this.rbAero.Margin = new System.Windows.Forms.Padding(2);
this.rbAero.Name = "rbAero";
this.rbAero.Size = new System.Drawing.Size(185, 17);
this.rbAero.TabIndex = 1;
this.rbAero.TabStop = true;
this.rbAero.Text = "Initialize database to Aero settings";
this.rbAero.UseVisualStyleBackColor = true;
this.rbAero.CheckedChanged += new System.EventHandler(this.rbAero_CheckedChanged);
//
// rbMigrateLocal
//
this.rbMigrateLocal.AutoSize = true;
this.rbMigrateLocal.Location = new System.Drawing.Point(12, 11);
this.rbMigrateLocal.Margin = new System.Windows.Forms.Padding(2);
this.rbMigrateLocal.Name = "rbMigrateLocal";
this.rbMigrateLocal.Size = new System.Drawing.Size(326, 17);
this.rbMigrateLocal.TabIndex = 0;
this.rbMigrateLocal.TabStop = true;
this.rbMigrateLocal.Text = "Copy data from previous Local database to new Local database";
this.rbMigrateLocal.UseVisualStyleBackColor = true;
this.rbMigrateLocal.CheckedChanged += new System.EventHandler(this.rbMigrateLocal_CheckedChanged);
//
// cbCopyConfig
//
this.cbCopyConfig.AutoSize = true;
this.cbCopyConfig.Checked = true;
this.cbCopyConfig.CheckState = System.Windows.Forms.CheckState.Checked;
this.cbCopyConfig.Location = new System.Drawing.Point(39, 37);
this.cbCopyConfig.Name = "cbCopyConfig";
this.cbCopyConfig.Size = new System.Drawing.Size(232, 17);
this.cbCopyConfig.TabIndex = 5;
this.cbCopyConfig.Text = "Copy configuration from previous installation";
this.cbCopyConfig.UseVisualStyleBackColor = true;
//
// DBTypeChoice
//
this.AcceptButton = this.btnOK;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(707, 485);
this.ControlBox = false;
this.Controls.Add(this.gbMigrateOrInit);
this.Controls.Add(this.btnBrowseDestinationDB);
this.Controls.Add(this.tbDestinationDB);
this.Controls.Add(this.lblDestinationDB);
this.Controls.Add(this.btnBrowseSourceDB);
this.Controls.Add(this.tbSourceDB);
this.Controls.Add(this.lblSourceDB);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.tbDBUser);
this.Controls.Add(this.lblDBUser);
this.Controls.Add(this.cbUseNTLMAuthentication);
this.Controls.Add(this.cbShowPassword);
this.Controls.Add(this.btnOK);
this.Controls.Add(this.tbDBName);
this.Controls.Add(this.tbDBPassword);
this.Controls.Add(this.tbDBHostname);
this.Controls.Add(this.lblDBName);
this.Controls.Add(this.lblDBPassword);
this.Controls.Add(this.lblDBHostname);
this.Controls.Add(this.groupBox1);
this.Controls.Add(this.lblSelectType);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "DBTypeChoice";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "DataPRO Database Information";
this.TopMost = true;
this.Load += new System.EventHandler(this.DBTypeChoice_Load);
this.groupBox1.ResumeLayout(false);
this.groupBox1.PerformLayout();
this.gbMigrateOrInit.ResumeLayout(false);
this.gbMigrateOrInit.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label lblSelectType;
private System.Windows.Forms.RadioButton rbLocal;
private System.Windows.Forms.RadioButton rbCentralized;
private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.Label lblDBHostname;
private System.Windows.Forms.Label lblDBPassword;
private System.Windows.Forms.Label lblDBName;
private System.Windows.Forms.TextBox tbDBHostname;
private System.Windows.Forms.TextBox tbDBPassword;
private System.Windows.Forms.TextBox tbDBName;
private System.Windows.Forms.Button btnOK;
private System.Windows.Forms.CheckBox cbShowPassword;
private System.Windows.Forms.CheckBox cbUseNTLMAuthentication;
private System.Windows.Forms.Label lblDBUser;
private System.Windows.Forms.TextBox tbDBUser;
private System.Windows.Forms.RadioButton rbBoth;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Button btnBrowseDestinationDB;
private System.Windows.Forms.TextBox tbDestinationDB;
private System.Windows.Forms.Label lblDestinationDB;
private System.Windows.Forms.Button btnBrowseSourceDB;
private System.Windows.Forms.TextBox tbSourceDB;
private System.Windows.Forms.Label lblSourceDB;
private System.Windows.Forms.GroupBox gbMigrateOrInit;
private System.Windows.Forms.RadioButton rbTSRAIR;
private System.Windows.Forms.RadioButton rbCrash;
private System.Windows.Forms.RadioButton rbAero;
private System.Windows.Forms.RadioButton rbMigrateLocal;
private System.Windows.Forms.RadioButton rbNoneOfTheAbove;
private System.Windows.Forms.CheckBox cbCopyConfig;
}
}

Binary file not shown.