MySQL Connector/ODBC 5.2 Installation – Error 1918/System Error Code 126 work around

The other day I was installing MySQL Connector ODBC 5.2.6 x64 (mysql-connector-odbc-5.2.6-winx64.msi) on a Windows 2008 Server R2 and I keep getting an error message about a module that could not be found.  The exact error in event viewer was:

Product: MySQL Connector/ODBC 5.2 — Error 1918.Error installing ODBC driver MySQL ODBC 5.2 ANSI Driver, ODBC error 13: The setup routines for the MySQL ODBC 5.2 ANSI Driver ODBC driver could not be loaded due to system error code 126: The specified module could not be found. (C:\Program Files\MySQL\Connector ODBC 5.2\myodbc5S.dll).. Verify that the file MySQL ODBC 5.2 ANSI Driver exists and that you can access it.

So after searching for a while on Google and without any success, I get out the trusty old SysInternals ProcMon and monitor the installation of the MySQL Connector.  Come to find out the installation was looking for a specific .NET dll on the system that was not there.  So I search on Google some more regarding this file missing.  Someone else had the same problem when installing a completely different application.  So I followed their advice of copying C:\Windows\System32\msvcr100_clr0400.dll to C:\Windows\System32\msvcr100.dll and continued with the install.  The process worked and the driver was successfully installed and tested.

Just thought other people might find that tip useful.

 

TracemasterVue Simple Client Install

Have you ever wanted to simply install the TracemasterVue client to a system easily without all the hassle of downloading the app via the URL?  Well, if the answer is Yes then here are the instructions to accomplish it. I have tested this with version C.03.01.02.

This is purely informational, but it does work and is currently working in the environment I support.

1)  Install the required .NET components for the TracemasterVue client.

2) Install Adobe Reader Version 8 or 10. These are the only 2 versions that are supported by the client.

3) Copy the \\<TRACEMASTER>\C$\TracemasterVue\Bin folder to your local client.  Let’s say C:\Program Files\TMVueClient

4) Register the PDFDocScout.dll.

  • Open an Administrator Command Prompt
  • Navigate to C:\Program Files\TMVueClient
  • regsvr32 PDFDocScout.dll

5) Modify the EMSClientapp.exe.config

  • Notepad C:\Program Files\TMVueClient\EMSClientApp.exe.config
  • Locate a line that starts with <add key=”ServerIP” value=”xxx.xxx.xxx.xxx” />
  • Modify the line and replace the xxx.xxx.xxx.xxx with the IP address of your TraceMasterVue Server.  You can use the Full Qualified Domain Name instead of the IP.
  • Again, search for a line that starts with <add key=”ServerIP” value=”xxx.xxx.xxx.xxx” />
  • Again, modify the line and replace the xxx.xxx.xxx.xxx with the IP address of your TraceMasterVue Server.  You can use the Full Qualified Domain Name instead of the IP.
  • Save the File.

6) Create a shortcut on the “All Users” desktop to launch C:\Program Files\TMVue Client\EMSClientApp.exe.

These instructions will work for publishing the TMVue Client application in Citrix as well.  For Step 6 you just need to publish the EMSClientApp.exe located in the C:\Program Files\TMVue Client folder.

 

Unetixs DICOM MultiLab – DICOM Server on a stick

Have you ever wanted to created DICOM files with your Unetixs DICOM MultiLab without transmitting them to a networked DICOM server?

Yes! This is the preferred workflow for our vascular technologist that use the Unetixs device in the field on a daily basis. By providing a DICOM server and storage on an encrypted USB device, the technologists do not have to lug the Unetixs device into the medical center to transfer their DICOM studies. All they need is their encrypted USB device with a simple DICOM server configured to also be a storage device.

Background
I attempted to find out how the Unetixs MultiLab was creating DICOM files. Well it appears that the DICOM files are built on the fly and are not stored anywhere on the device. I used tools like Sysinternals Filemon to monitor the files being accessed and created during some testing and transmission. I was unable to locate a DICOM based file, so I am assuming that the DICOM file is being generated (or a DICOM wrapper is being applied) in memory. Since I was unable to write a script to pull any DICOM files off the Unetixs device I decided to look for DICOM servers that can run in a small footprint. I found a nice utility, dcmqrscp.exe, which is included in the DICOM Toolkit, DCMTK 3.6.0 for Windows (32 bit), found at http://dcmtk.org/dcmtk.php.en.

After testing the theory that I could run this environment on a USB device I quickly started to write a wrapper around dcmqrscp.exe to provide all of the necessary parameters and environment to successfully run this server from a USB device.

Environment
I created a folder on the USB device called DCMUNET under that folder there are 2 folders a BIN and a DATA file. The Bin folder contains the executable, script, template, and configuration file required to run the script from the USB device. The DATA folder contains the transferred DICOM images.

The BIN folder consists of the following:
dcmqrscp.tpl – Is a dcmqrscp.exe template configuration file that will be used to create a dcmqrscp.cfg file each time the USBDICM.VBS is executed.

USBDICM.VBS – The main wrapper to start and stop the DICOM server. Once the script runs, it checks to see if dcmqrscp.exe is running. If it is not running, the script reads the dcmqrscp.tpl file in to memory, replaces known tags with correct known run time values, and generates a dcmqrscp.cfg. Once the dcmqrscp.cfg file is generated the dcmqrscp.exe is executed.  If the executable is running, the process is killed and the user is allowed to eject the USB at this time.

dcmqrscp.exe – Is the DICOM Server executable from the DICOM Toolkit, DCMTK 3.6.0 for Windows (32 bit).

dcmqrscp.cfg – Configuration files required to successfully run the dcmqrscp.exe from the USB device. This file is generated every time USBDICM.VBS is executed since the USB drive letter can change between USB devices and Unetixs devices.

In addition, in the root of the USB device is a batch script that can be double clicked on to make the whole experience better for the vascular technologist by giving them an easy way to start/stop the server. This script is called @USB DICOM Server.bat.

The ZIP archive below contains the files required to run your DICOM server. The dcmqrscp.exe is not included in the archive; it can be obtained at http://dcmtk.org/dcmtk.php.en.

ZIP archive: DICOM Server on a Stick

Philips Zymed Holter Configuration File v2.9.4 Backup Script

Being the sole IT support person for Philips Zymed where I am employed I sometimes get calls about a configuration that the reader has changed and is unable to restore to their original settings.  Being an IT individual, I am not well versed in all of the Holter tools and functions.  So I did some research to determine where the Holter application configuration information was stored. I wrote a script that I placed in the startup folder on the PC to backup the Holter configuration files every time a reader logs on to the system.  When I receive a call with a configuration issue, all I have to do is restore my backed up files.  These backup configuration files have a date/time stamp attached which allows me multiple configuration files I can restore from.  See DOS BATCH script below:

@echo off
setlocal
CLS

echo Holter Configuration File Backup (v100a)
echo (c) 2011 Your Company Here (08/29/2011)
echo. 

REM
REM Break Date and Time down into managable pieces
REM
call :SETTIMEVARS

REM
REM Set some environment variables for easy alterations later.
REM
set USRCFGPATH=%APPDATA%\Holter
set USRBKUPPATH=%APPDATA%\Holter\Backup
set APPCFGPATH=%ALLUSERSPROFILE%\Application Data\Holter
set APPBKUPPATH=%ALLUSERSPROFILE%\Application Data\Holter\Backup

REM
REM Copy the User Configuration Files to the Backup Folder and time stamp the files.
REM
mkdir "%USRBKUPPATH%" > NUL: 2>&1
copy /v "%USRCFGPATH%\CentralUsrConfig.ini" "%USRBKUPPATH%\CentralUsrConfig.ini.%CCTIME%"
copy /v "%USRCFGPATH%\HolterUsrConfig.ini" "%USRBKUPPATH%\HolterUsrConfig.ini.%CCTIME%"
copy /v "%USRCFGPATH%\RemoteUsrConfig.ini" "%USRBKUPPATH%\RemoteUsrConfig.ini.%CCTIME%"

REM
REM Copy the App Configuration Files to the Backup Folder and time stamp the files.
REM
mkdir "%APPBKUPPATH%" > NUL: 2>&1
copy /v "%APPCFGPATH%\CentralAppConfig.ini" "%APPBKUPPATH%\CentralAppConfig.ini.%CCTIME%"
copy /v "%APPCFGPATH%\HolterAppConfig.ini" "%APPBKUPPATH%\HolterAppConfig.ini.%CCTIME%"
copy /v "%APPCFGPATH%\RemoteAppConfig.ini" "%APPBKUPPATH%\RemoteAppConfig.ini.%CCTIME%"

goto FIN

:SETTIMEVARS
  for /f "tokens=1* delims= " %%a in ('date/t') do set dayname=%%a
  for /f "tokens=2* delims= " %%a in ('date/t') do set mmddyyyy=%%a
  for /f "tokens=1* delims=/" %%a in ('echo %mmddyyyy%') do set month=%%a
  for /f "tokens=2* delims=/" %%a in ('echo %mmddyyyy%') do set day=%%a
  for /f "tokens=3* delims=/" %%a in ('echo %mmddyyyy%') do set year=%%a
  for /f "tokens=1* delims=:" %%a in ('echo %time%') do set hour=%%a
  for /f "tokens=2* delims=:" %%a in ('echo %time%') do set mins=%%a
  for /f "tokens=3* delims=:" %%a in ('echo %time%') do set sec=%%a
  for /f "tokens=1* delims=." %%a in ('echo %sec%') do set secs=%%a
  for /f "tokens=2* delims=." %%a in ('echo %sec%') do set mili=%%a
  if %hour% lss 10 set hour=0%hour%

  REM create an environment variable which includes date time stamp.
  set CCTIME=%year%%month%%day%_%hour%%mins%%secs%
GOTO :EOF

:FIN
endlocal
Exit

Retrieve Desktop Shortcut (URL and LNK) Information Remotely

Every needed to get all of the TargetPaths and Parameters from the Shortcuts and URLs from a remote machine (given you have the permissions)? This script below will gather all of that information display it to the console and save the same link information into a file called links.txt on your C:\ drive. The script will scour each and ever user folder under C:\Documents and Settings\. This script will work successfully on Windows XP machines, it will not however work on Windows Vista or Windows 7 due to the location of the users folders.

Usage:
cscript links.vbs
cscript links.vbs

Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Set objShell = CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set filetxt = objFSO.OpenTextFile("c:\links.txt", ForAppending, True)
set oArgs=wscript.Arguments

Function Ping(myHostName)

   Dim colPingResults, objPingResult, strQuery

   strQuery = "SELECT * FROM Win32_PingStatus WHERE Address = '" & myHostName & "'"

   Set colPingResults = GetObject("winmgmts://./root/cimv2").ExecQuery( strQuery )

   For Each objPingResult In colPingResults
      If Not IsObject( objPingResult ) Then
        Ping = False
      ElseIf objPingResult.StatusCode = 0 Then
        Ping = True
      Else
        Ping = False
      End If
   Next

   Set colPingResults = Nothing

End Function

Sub forceUseCScript()
   If Not WScript.FullName = WScript.Path & "\cscript.exe" Then
      objShell.Run "cmd.exe /c " & WScript.Path & "\cscript.exe //NOLOGO " & _
         Chr(34) & WScript.scriptFullName & Chr(34) & " " & oArgs(0),1,False
      WScript.Quit 0
   End If
End Sub 

Sub QueryLNKURL(Path)
   Set objFolder = objFSO.GetFolder(Path)
   For each objFile in objFolder.Files
      strPath = objFile.Path
      Select Case Right(Lcase(objFile),4)
         Case ".lnk":
            Set objShortcut = objShell.CreateShortcut(strPath)
            netPath = "\\" & oArgs(0) & "\c$"
            Temp = Replace(objShortcut.FullName, netPath, "C:")
            filetxt.WriteLine(oArgs(0) & "|L|" & Temp & "|" & _
               objShortcut.TargetPath & "|" & objShortcut.Arguments)
            Wscript.Echo oArgs(0) & "|L|" & Temp & "|" & objShortcut.TargetPath & _
               "|" & objShortcut.Arguments
         Case ".url":
            Set objShortcut = objShell.CreateShortcut(strPath)
            netPath = "\\" & oArgs(0) & "\c$"
            Temp = Replace(objShortcut.FullName, netPath, "C:")
            filetxt.WriteLine(oArgs(0) & "|U|" & Temp & "|" & objShortcut.TargetPath)
            Wscript.Echo oArgs(0) & "|U|" & Temp & "|" & objShortcut.TargetPath
      End Select
   Next

   For each objFile in objFolder.SubFolders
      strPath = objFile.Path
      QueryLNKURL(strPath)
   Next

End Sub

Sub RecurseFolderDesktop(sDir)
   Set oDir = objFSO.GetFolder(sDir)
   For Each i In oDir.SubFolders
      if ((strcomp(i.Name, "Default User", 1) <> 0) and _
          (strcomp(i.Name, "LocalService", 1) <> 0) and _
          (strcomp(i.Name, "NetworkService", 1) <> 0) and _
          (strcomp(i.Name, "Administrator", 1) <> 0)) then
         if (objFSO.FolderExists(sDir & "\" & i.Name & "\Desktop")) then
            QueryLNKURL(sDir & "\" & i.Name & "\Desktop")
         end if
      end if
   Next
End Sub

Banner = "Links v100a " & chr(13) & chr(10) & "(c)2011 Your Site" & _
         chr(13) & chr(10) & chr(13) & chr(10)

if (oArgs.Count <> 1) then
   Wscript.Echo Banner & chr(13) & chr(10) & _
      "Links Usage: " & chr(13) & chr(10) & "  Links <ip or hostname>"
   Wscript.Quit
end if

forceUseCScript
Wscript.Echo Banner

pResult = Ping(oArgs(0))
if pResult = False then
   Temp = "Unable to ping machine.  Invalid IP address or PC not available."
   filetxt.WriteLine(oArgs(0) & "|X|" & Temp & "|")
   Wscript.Echo oArgs(0) & "|X|" & Temp & "|"
else
   ' We have shortcuts in this path on most machines.
   attempt = false
   SCPath = "\\" & oArgs(0) & _
      "\c$\documents and settings\all users\start menu\applications\"
   if (objFSO.FolderExists(SCPath)) then
      QueryLNKURL(SCPath)
      attempt = true
   end if

   SCPath = "\\" & oArgs(0) & "\c$\documents and settings"
   if (objFSO.FolderExists(SCPath)) then
      attempt = true
      RecurseFolderDesktop objFSO.GetFolder(SCPath).Path
   end if

   if (attempt = false) then
      Temp = "Unable to locate any appropriate folders to query."
      filetxt.WriteLine(oArgs(0) & "|X|" & Temp & "|")
      Wscript.Echo oArgs(0) & "|X|" & Temp & "|"
   end if
end if

Set objFolder = Nothing
Set objFSO    = Nothing
Set objShell  = Nothing
filetxt.Close

Add an Active Directory printer VBScript

The area that I support one day needed multiple Active Directory (AD) printers mapped for multiple users on multiple machines.  I wanted a nice uniform way to add all these printers quickly without bothering the end user.  The VBScript that I wrote was placed in the “All Users” startup folder and will be executed by each user automatically when they log on to the system. By placing all the printer mappings in a file I can easily manage adding, deleting, and setting default printers remotely for a user or for all users on that PC. Please see the script and the corresponding data file below.


Option Explicit
CONST ForReading = 1

Dim ComputerName, UserName, objShell, objNetwork, PrinterMapFile, objFSO, strData
Dim pComputer, pUser, pPrinter, pAction, CharacterCount, arrLines, strLine
Dim posn1, posn2, posn3

Set objNetwork = CreateObject("WScript.Network")
Set objShell = WScript.CreateObject("WScript.Shell")

Sub forceUseCScript()
  If Not WScript.FullName = WScript.Path & "\cscript.exe" Then
    objShell.Run "cmd.exe /c " & WScript.Path & "\cscript.exe //NOLOGO " & Chr(34) & _
    WScript.scriptFullName & Chr(34),1,False
    WScript.Quit 0
  End If
End Sub

forceUseCScript

' Get the computer's name.
ComputerName = UCase(objNetwork.ComputerName)
UserName = UCASE(objShell.ExpandEnvironmentStrings("%USERNAME%"))

Wscript.Echo "Printer Mapper v100a"
Wscript.Echo "Company Name Here"
Wscript.Echo " "

'name of the text file
PrinterMapFile = "C:\printer.map"

'Create a File System Object
Set objFSO = CreateObject("Scripting.FileSystemObject")

' Check to see if File Exists, if not then exit right there.
If NOT objFSO.FileExists(PrinterMapFile) then
  wscript.quit
end if

'Open the text file - strData now contains the whole file
strData = objFSO.OpenTextFile(PrinterMapFile,ForReading).ReadAll

'Split the text file into lines
arrLines = Split(strData,vbCrLf)

'Step through the lines
For Each strLine in arrLines
  CharacterCount = Len(strLine) - Len(Replace(strLine, ",", ""))
  if Left(strLine, 1) <> "'" and CharacterCount = 3 then
    posn1 = InStr(1, strLine, ",", 1)
    posn2 = InStr(posn1+1, strLine, ",", 1)
    posn3 = InStr(posn2+1, strLine, ",", 1)
    pComputer = UCase(Left(strLine, posn1-1))
    pUser = UCase(Mid(strLine, posn1+1, posn2-posn1-1))
    pPrinter = Mid(strLine, posn2+1, posn3-posn2-1)
    pAction = Right(strLine, Len(strLine) - posn3)

    if pComputer = ComputerName then
      if pUser = UserName or pUser = "ALLUSERS" then
        ' Add and make it default
        if pAction = "D" then
          Wscript.Echo "Adding/Default: " & pPrinter
          objNetwork.AddWindowsPrinterConnection pPrinter
          objNetwork.SetDefaultPrinter pPrinter
        end if

        ' Add
        if pAction = "A" then
          Wscript.Echo "Adding: " & pPrinter
          objNetwork.AddWindowsPrinterConnection pPrinter
        end if

        ' Remove
        if pAction = "R" then
          Wscript.Echo "Removing: " & pPrinter
          objNetwork.RemovePrinterConnection pPrinter
        end if
      end if
    end if
  end if
Next

'Cleanup
Set objFSO = Nothing

<—-Data File—->

' Computer Name,User,PRINTSVR Printer,A(dd), D(efault)/Add, R(emove)
E-CARD-STAFF1,ALLUSERS,\\PRINTSVR\E-EL-COLOR1-PS,A
E-CARD-STAFF2,ALLUSERS,\\PRINTSVR\E-EL-COLOR1-PS,A
E-CARD-STAFF3,ALLUSERS,\\PRINTSVR\E-EL-COLOR1-PS,A
E-CARD-STAFF4,ALLUSERS,\\PRINTSVR\E-EL-COLOR1-PS,A
E-CARD-STAFFMGR,ALLUSERS,\\PRINTSVR\E-EL-COLOR1-PS,D
E-CARD-STAFF5,MRH001,\\PRINTSVR\E-CARD-MFD-PS,A

<—-Data File—->

LANDesk SoftMon Monitoring Information

LANDesk Softmon.exe monitors application execution and logs usage information in the registry. The following information is logged to the registry: Current Duration, Current User, First Started, Last Duration, Last Started, Total Duration, and Total Runs. This information is useful to determine application usage and location of said applications.

The monitor information can be found in the following registry key:
[HKEY_LOCAL_MACHINE\SOFTWARE\LANDesk\ManagementSuite\WinClient\SoftwareMonitoring\MonitorLog\]

Each log entry receives a new key, an example would be C:/Program Files/Microsoft Office/OFFICE11/EXCEL.EXE.

Under this application name key you may see the following registry values, not all values are available:
Current Duration
Current User
First Started
Last Duration
Last Started
Total Duration
Total Runs

Unfortunately, if an application is no longer available the usage information still lives on in the registry. This may give you inaccurate usage information if you solely rely on this data. I would recommend checking to see if the application still exists in the path specified by the key to determine if the application is still available on the PC.

How do you determine Last Duration?
1) Extract the Last Duration REG_BINARY value in Hex.
Example: 20 F2 96 1E A6 00 00 00
2) Open Windows Calculator in Scientific mode and choose Hex and Qword radio buttons
3) Enter the Hex from right to left into the calculator:
00 00 00 a6 1E 96 F2 20
4) Click the Dec radio to switch the decimal.
5) Divide the decimal number by 10,000,000
You will now have the Last Duration in seconds. In this example the result will be 71347.778 seconds.

How do you determine Total Duration?
1) Extract the Total Duration REG_BINARY value in Hex.
Example: 10 B1 AD D9 CB 09 00 00
2) Open Windows Calculator in Scientific mode and choose Hex and Qword radio buttons
3) Enter the Hex from right to left into the calculator:
00 00 09 CB D9 AD B1 10
4) Click the Dec radio to switch the decimal.
5) Divide the decimal number by 10,000,000
You will now have the Total Duration in seconds. In this example the result will be 1077113.505 seconds.

How do you determine Current Duration?
1) Extract the Current Duration REG_BINARY value in Hex.
Example: 80 97 6A 76 2F 00 00 00
2) Open Windows Calculator in Scientific mode and choose Hex and Qword radio buttons
3) Enter the Hex from right to left into the calculator:
00 00 00 2F 76 6A 97 80
4) Click the Dec radio to switch the decimal.
5) Divide the decimal number by 10,000,000
You will now have the Current Duration in seconds. In this example the result will be 20385.016 seconds.

How do you determine Last Started?
1) Extract the Last Started REG_BINARY value in Hex.
Example: 40 4D C8 A0 55 45 CC 01
2) Open Windows Calculator in Scientific mode and choose Hex and Qword radio buttons
3) Enter the Hex from right to left into the calculator:
01 CC 45 55 A0 C8 4D 40
4) Click the Dec radio to switch the decimal.
5) Use this decimal number in a Filetime converter utility to get the date and time.
I found a useful converter at: http://www.silisoftware.com/tools/date.php
The input format is filetime and key the decimal into the date field.
6) Click convert and you have the Last Started date.

How do you determine First Started?
1) Extract the First Started REG_BINARY value in Hex.
Example: 50 0D CE 02 00 09 CC 01
2) Open Windows Calculator in Scientific mode and choose Hex and Qword radio buttons
3) Enter the Hex from right to left into the calculator:
01 CC 09 00 02 CE 0D 50
4) Click the Dec radio to switch the decimal.
5) Use this decimal number in a Filetime converter utility to get the date and time.
I found a useful converter at: http://www.silisoftware.com/tools/date.php
The input format is filetime and key the decimal into the date field.
6) Click convert and you have the First Started date.

How do you determine the Current User?
1) Extract the Current User REG_SZ value in a string value.

How do you determine Total Runs?
1) Extract the Total Runs REG_DWORD in a decimal value to get the total number of executions.

You may be asking why I would go through so much trouble to determine the usage of an application on a computer. Well, I come from the background that if you can keep a computer clean that it will perform the best. By using this information, I can determine if the application needs to be reinstalled on a replacement PC or if it needs to be uninstalled on a current PC. By using this information you may find how and when a user uses an application.

** Note this information is provide for educational purposes only. **

Philips Zymed Site Encryption

I am in the process of upgrading the Philips Zymed Holter system including a new Central Link. I have a list of site codes, user id, and passwords for all my locations, but since I was not the originator of the document and could not verify the passwords were entered correctly in the spreadsheet I set out to decrypt the password and site information. The Philips Zymed Central Link software stores the site information in the registry for version 2.8 and in a configuration files under “all users” on version 2.9.

On my version 2.8 system I found the key located in the registry located under the following key: HKEY_LOCAL_MACHINE\SOFTWARE\Zymed\. I exported the entire Zymed sub key structure. You will see a value labeled RemoteConfig under HKEY_LOCAL_MACHINE\SOFTWARE\Zymed\Zybit Central\0.1\Configure. You will see a hex encoded string. Using my 17 years of experience, I started by looking for a pattern in the hex encoded string and found a pattern.

I started to decipher the encryption by adding a new site to my site list and providing a known key sequence to the description and password. I entered the entire alphabet in uppercase and lowercase. I noted the offset in the letter that was entered and the encoded hex value that it produced. I noted all of the values entered and went a head with replacing all of the values in the registry export with the known values. After going through a few iterations of the offsets you start to see the site code, descriptions, and password being revealed.

After more evaluation the encoding algorithm is simply an offset within a byte. To decrypt a value you simply need to know a little subtraction and hex to ASCII conversion. The base of the encryption starts with 255 (FF) as it’s offset. You take the a sample value like BE and subtract it from FF. So it is FF-BE=41 HEX or 65 ASCII. This is the value A.

Needless to say, I was able to successfully verify my spreadsheet full of site information before I migrated to the new server.

You may be asking yourself why didn’t you just export and re-import the registry? It is because version 2.9 does not store the RemoteConfig in the registry anymore.

** Note this information is provide for educational purposes only. **