FIX: Welch Allyn / Mortara Diagnostic Cardiology Suite - Service Crashes and Server Connection Guide

Posted by bensonGpixel@reddit | sysadmin | View on Reddit | 13 comments

In case anyone needs this info in the future, here ya go. No clue how helpful this will be, but here is what I found after days and days of troubleshooting..

The "Leetspeak" Bug (Startup Crashes)

The Symptom: You try to start the CorScribeAppServer service on the server, or launch ExamMgrUI.exe on the client, and it crashes instantly.

The Error: Event Viewer shows a System.IO.FileNotFoundException for misspelled files like ntd1l.dll (with a "one"), msc0ree.dll (with a "zero"), or kern3l32.dll.

The Cause: There is a hardcoded typo in Mortara’s diagnostic module. It tries to inventory 32-bit DLLs in C:\Windows\SysWOW64, but because the names are misspelled, the .NET framework throws an unhandled exception and kills the app.
The Fix: You have to "satisfy" the typo by creating dummy files with those misspelled names.

Run this in Command Prompt (Admin) on BOTH the Server and the Laptop:

cd C:\Windows\SysWOW64
echo. > ntd1l.dll
echo. > msc0ree.dll
echo. > kern3l32.dll

Server Not Available (even after you have configured the server)

The Symptom: Your firewall is open on Port 7502 and the service is running, but the client still throws "Server not available" and tries to connect to localhost.

The Cause: The main EXE configuration is often ignored. The application instead pulls network settings from a half-dozen "Ghost DLL" config files hidden in the ModalityMgr folder. These are all hardcoded to localhost by default.

The Fix: Bulk-update every config file in that directory using PowerShell. Do NOT do this manually in Notepad; copy-pasting into XML often introduces invisible "non-breaking space" characters (U+00A0) that will crash the app parser.

Run this on the CLIENT PC in PowerShell (Admin): 
(Change 0.0.0.0 to your Server’s actual IP)

$serverIP = "0.0.0.0"
$files = Get-ChildItem -Path "C:\Program Files (x86)\Mortara Instrument Inc\ModalityMgr" -Include *.xml, *.config -Recurse

foreach ($file in $files) {
    (Get-Content $file.FullName) -replace 'localhost', $serverIP -replace '127.0.0.1', $serverIP | Set-Content $file.FullName
}

The "PGDBInterface" Login Crash

The Symptom: You finally get the login prompt! But when you hit OK, you get a WCF FaultException: "The type initializer for 'Mortara.ExamMgr.IntegrationApi.PGDBInterface' threw an exception."

The Cause: This error comes from the Server. It means the client successfully hit the server, but the server crashed trying to talk to its own Postgres database. This usually happens because the DBConnectionString in the server's config was changed to the network IP. Since the DB is on the same machine, it must stay as the local loopback (127.0.0.1).

The Fix: Force the database string back to localhost on the server and bounce the services. 

Run this on the SERVER in PowerShell (Admin):

$configPath = "C:\Program Files (x86)\Mortara Instrument Inc\ModalityMgr\Mortara.ExamMgr.IntegrationApi.dll.config"

$configData = Get-Content $configPath
# Replace whatever network IP was there back to the local loopback
$configData = $configData -replace 'Server=[0-9.]+;Port=5432', 'Server=127.0.0.1;Port=5432'
Set-Content -Path $configPath -Value $configData

Restart-Service -Name "CorScribeDBSvc", "CorScribeAppServer" -Force

Disclaimer: I did all the trouble shooting and I did fix everything myself. I then explained everything to Gemini and had it write this up for me. I checked for any errors and hallucantaions and it looks clean to me :)