← Все заметки
Хранение и резервное копирование

Picasso Viewer и Ez3D2009 на TrueNAS: пилот централизованного хранения КТ (часть 1)

Практический пилот: DICOM на ZFS/SMB, проверка 1 939 файлов по SHA-256, три Windows 11 клиента и диагностика периодической ошибки Can not open ProjectFile через Process Monitor.

Статус: лабораторияОпубликовано: 2026-10-30Обновлено: 2026-10-30

Проверено на: TrueNAS SCALE · ZFS RAIDZ2 (SSD) · Windows 11 · Picasso Viewer 4.0.42 · Ez3D2009 1.2.6.22 / 1.2.6.33 · SMB · PowerShell 5.1 · Sysinternals Process Monitor

Контекст и границы результата

Задача пилота — проверить, можно ли вынести исследования стоматологической конусно-лучевой компьютерной томографии (КЛКТ/CBCT) с отдельных Windows-станций на центральный NAS, сохранив привычный сценарий просмотра через Picasso Viewer и Ez3D2009. Требовалось обеспечить доступ врачей из разных кабинетов, не подвергая риску действующие локальные базы.

Итог на 30 октября 2026 года: три пилотных исследования успешно открываются по SMB с двух компьютеров, в том числе одновременно. На третьем ПК те же исследования могут открываться корректно, но периодически возникает Can not open ProjectFile. С помощью Process Monitor обнаружен реальный конфликт за временный CSV-файл между экземплярами Ez3D2009, однако первопричина всей нестабильности ещё не доказана. Массовый переход на NAS не выполнялся.

Все имена ПК, домен, SMB-ресурс и пути в командах ниже — условные. В публикацию не включены данные пациентов, DICOM-заголовки, реальные сетевые адреса, ключи лицензий и исходные диагностические журналы.

01 / Тестовая архитектура

Компонент Конфигурация
Хранилище TrueNAS SCALE, отдельный SSD-пул ZFS RAIDZ2
Сжатие ZFS lz4
Соединение NAS 10 GbE
Клиенты Три доменные рабочие станции Windows 11, подключение 1 GbE
Авторизация Active Directory, выделенная группа чтения
Доступ SMB share только на чтение для пилотных клиентов
Viewer Picasso Viewer 4.0.42
3D-приложение Ez3D2009 1.2.6.22 и 1.2.6.33
                     Active Directory
                            |
                        TrueNAS SCALE
                       SSD / ZFS RAIDZ2
                            |
                SMB: доступ только на чтение
                            |
        +-------------------+-------------------+
        |                   |                   |
     WIN-01              WIN-02              WIN-03
     Windows 11          Windows 11          Windows 11
        |                   |                   |
   Picasso Viewer      Picasso Viewer      Picasso Viewer
        |                   |                   |
      Ez3D2009            Ez3D2009            Ez3D2009
       УСПЕШНО             УСПЕШНО            НЕСТАБИЛЬНО

Пример условного SMB-пути: \\nas.example.local\CBCT-ReadOnly$\Picasso. В Viewer сохраняли этот каталог; автоматическое удаление выключено, загрузка установлена в ручной режим. Отдельно проверялись членство в доменной группе и фактический доступ к SMB в новом сеансе пользователя.

В этом сценарии NAS — источник чтения для пилотного просмотра, а не готовая схема приёма новых исследований. Права записи, импорт с томографа, аудит изменений, резервирование и аварийное восстановление требуют отдельного проекта.

02 / Копирование и проверка данных

Для теста выделили три исследования. Набор содержал:

Показатель Значение
DICOM (.dcm) 1 936
Файлы проектов (.npj) 3
Всего файлов 1 939
Логический объём 2,46 GiB
Занято на ZFS с lz4 около 1,86 GiB

До переключения Viewer исходники сохранили отдельно. На рабочей станции также оставалась штатная локальная база; при временных тестовых переименованиях её возвращали на место с проверкой манифеста файлов. Это не был перенос production-данных «с удалением оригинала».

Сравнение SHA-256 исходного и центрального дерева после копирования показало: 1 939 совпадений, 0 отсутствующих, 0 лишних, 0 изменённых файлов. Проверка повторялась после одновременного открытия исследования на двух компьютерах — расхождений также не было.

Проверять только количество файлов недостаточно: одинаковые имена и размеры не гарантируют идентичное содержимое. Для собственной реализации можно использовать Get-FileHash -Algorithm SHA256 или сравнение полных манифестов с относительными путями. Не публикуйте сами манифесты: имена каталогов и DICOM-метаданные могут раскрывать сведения о пациентах.

03 / Результаты на трёх Windows-станциях

Сценарий WIN-01 WIN-02 WIN-03
Список трёх проектов виден Да Да Да
Чтение проектов с SMB Да Да Да
MPR/3D открывается Да, все 3 Да, все 3 Непостоянно
Периодическое Can not open ProjectFile Не наблюдали Не наблюдали Да

На WIN-01 и WIN-02 удалось одновременно открыть одно исследование с центрального SMB-ресурса. На WIN-03 любое из трёх исследований могло как успешно загрузиться, так и завершиться ошибкой; постоянно «плохого» проекта не было.

При ошибке Ez3D2009 выводил:

Can not open ProjectFile !!!
Please use the Ez3D2009 Menu (File -> Open Project)

Важный диагностический факт: файлы Default.npj читались с проблемного ПК, а их исходные копии совпадали с данными на NAS. Следовательно, ни ошибка SMB-доступа, ни повреждение сетевого проекта не были подтверждены. Но это ещё не исключает особенности чтения UNC в самом Ez3D.

04 / Сравнение клиентских компонентов

На двух станциях с Ez3D2009 1.2.6.33 сравнили основной Ez3D2009.exe по SHA-256: хеш совпал. Дополнительно сравнили набор из 52 EXE/DLL/OCX в корне каталога установки: состав и SHA-256 совпали.

Это снизило вероятность простой подмены основных бинарных файлов, но не делает окружения идентичными. Не были исключены различия в пользовательском AppData, реестре, зависимости в подкаталогах, сторонних компонентах, лицензировании и контексте запуска.

На проблемной станции прямой запуск Ez3D показывал сообщение о необходимости повторной регистрации пробной версии; при запуске через Viewer такого сообщения не наблюдали. Это отдельная непроверенная гипотеза, не основание обходить лицензионные проверки или изменять реестр.

05 / Почему Get-Process не дал ответа

Обычный PowerShell-снимок полезен для проверки оставшихся процессов:

Get-Process -Name Ez3D2009 -ErrorAction SilentlyContinue |
    Select-Object Id, StartTime, SessionId, Responding, MainWindowHandle

Но он не показывает быстро завершившиеся процессы. На проблемном ПК после ошибки иногда не обнаруживалось ни одного Ez3D2009.exe, а иногда процесс оставался без главного окна (MainWindowHandle=0).

Значение MainWindowHandle=0 не доказывает зависание: в одном из успешных запусков MPR/3D окно исследования было доступно, хотя главный дескриптор у процесса равнялся нулю.

Для воспроизводимой трассировки использовали Microsoft Sysinternals Process Monitor, запущенный повышенно под отдельной администраторской учётной записью. Конечному пользователю административные права не выдавали.

Пример сохранения трассы (каталоги условные, запускайте только после проверки свободного места):

$Procmon = 'C:\Tools\Procmon64.exe'
$Pml = 'C:\Diagnostics\Ez3D-Test.pml'

Start-Process $Procmon -ArgumentList (
    '/AcceptEula /NoFilter /Quiet /Minimized ' +
    '/BackingFile "' + $Pml + '"'
)

# Воспроизвести ОДНУ ошибку в пользовательском сеансе,
# затем остановить трассировку:
Start-Process $Procmon -ArgumentList '/Terminate /Quiet' -Wait

В пилоте трасса заняла 597,14 МБ и содержала 1 356 803 события. Полный PML не передавали третьим лицам и не публиковали: он может содержать имена пациентов в путях файлов, сведения о системе и пользовательских профилях.

06 / Что обнаружено в трассе

Процессы Ez3D действительно запускались из Picasso Viewer. В одной записи были три отдельных запуска и частичное перекрытие времени работы первых двух экземпляров.

При первичной группировке встречались:

Результат операции Количество
Ez3D2009.exe / PATH NOT FOUND 89
Ez3D2009.exe / SHARING VIOLATION 1
picasso-viewer.exe / RegCreateKey / ACCESS DENIED 62

Не следует считать всякий PATH NOT FOUND критической ошибкой: приложения часто проверяют несколько путей для поиска конфигурации или DLL. Отказ при попытке создать один ключ реестра также не равен сбою приложения. Потребовалась корреляция конкретного PID, файла и времени.

Самая определённая находка — общая точка конфликта в %LOCALAPPDATA%\Temp: два экземпляра Ez3D2009 обращались к одному CSV-файлу.

Время Событие
08:27:06 Ez3D №1 открыл CSV: SUCCESS
08:27:56 Ez3D №2 открыл тот же путь: SHARING VIOLATION
08:28:02 Ez3D №1 закрыл CSV
08:28:20 Ez3D №3 открыл CSV: SUCCESS

Конфликт доступа подтверждён. Но пока нельзя утверждать, что именно этот CSV всегда вызывает Can not open ProjectFile. Вторая попытка завершилась без признака аварийного выхода процесса; также остались другие непроверенные операции.

07 / Контрольные запуски и опровержение преждевременного вывода

Выполнили цикл с полным завершением Ez3D2009.exe перед открытием следующего исследования:

Исследование Загрузка MPR/3D Закрытие
№1 Успешно Процессов 0
№2 Успешно Процессов 0
№3 Успешно Процессов 0

Это выглядело как решение проблемы параллельных запусков. Однако после перезапуска Picasso Viewer ошибка повторилась: третье и первое исследования не открылись, а второе открылось.

Позднее Get-Process показал ноль экземпляров Ez3D; этот снимок не исключает кратковременного запуска и завершения программы до проверки.

Следовательно, последовательный запуск — полезный диагностический приём, но пока не подтверждённое исправление. Обнаруженная блокировка CSV может быть одной из причин или сопутствующим эффектом.

08 / Дальнейшая диагностика

Следующий этап — сравнить успешную и неуспешную попытки для конкретного проекта в одной контролируемой сессии, сохранив:

  1. временные отметки действий и PID;
  2. операции чтения Default.npj и зависимых файлов;
  3. попытки доступа к временным файлам и локальной конфигурации;
  4. события Windows Application Error / Windows Error Reporting;
  5. различия между запуском Ez3D через Viewer и напрямую.

Гипотезы о лицензировании, UNC-путях, рабочем каталоге и профиле пользователя должны проверяться отдельно. Не стоит начинать с изменения ACL, отключения антивируса, замены EXE, чистки AppData или правки лицензирования: это разрушает воспроизводимость и создаёт риск для рабочих данных.

09 / Практические выводы

Статус: пилот, без массового переключения клиники. Во второй части планируется разобрать окончательную причину Can not open ProjectFile, подтверждённое исправление и контроль устойчивости — только после получения воспроизводимых доказательств.

Ссылки