Исправление временного профиля iikoCard5 POS

Все команды — PowerShell от администратора.

  1. Узнать, под какой учёткой работает служба:
Get-CimInstance Win32_Service -Filter "Name='iikoCard5POS'" |
Select-Object Name, StartName, State

Нормально:

StartName : NT SERVICE\iikoCard5POS
  1. Узнать SID службы:
sc.exe showsid iikoCard5POS

Получим что-то вроде:

SID СЛУЖБЫ:
S-1-5-80-2089827238-1977538945-850451106-517559485-343217631

Сохраняем его в переменную:

$SID='S-1-5-80-2089827238-1977538945-850451106-517559485-343217631'
  1. Посмотреть существующие записи профиля:
$base='HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList'

Get-ChildItem $base |
Where-Object {$_.PSChildName -like "$SID*"} |
ForEach-Object {
    $x=Get-ItemProperty $_.PSPath
    [PSCustomObject]@{
        SID=$_.PSChildName
        Path=$x.ProfileImagePath
        State=$x.State
        RefCount=$x.RefCount
    }
}

При проблеме часто будет:

SID  : S-1-5-80-....bak
Path : C:\Users\iikoCard5POS

а Windows при каждом старте создаёт:

C:\Users\TEMP.NT SERVICE
C:\Users\TEMP.NT SERVICE.000
C:\Users\TEMP.NT SERVICE.001
...
  1. Остановить iikoCard5 POS:
Stop-Service iikoCard5POS -Force

Проверить оставшийся SQL LocalDB:

Get-CimInstance Win32_Process -Filter "Name='sqlservr.exe'" |
Select-Object ProcessId, CommandLine

Если остался именно sqlservr.exe LocalDB от iikoCard5 POS — завершить его по PID:

Stop-Process -Id <PID> -Force

Не завершать чужие SQL Server процессы.

  1. Если данные POS сохранять не требуется — удалить регистрацию повреждённого профиля:
Remove-Item "$base\$SID" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item "$base\$SID.bak" -Recurse -Force -ErrorAction SilentlyContinue

Проверить:

Get-ChildItem $base |
Where-Object {$_.PSChildName -like "$SID*"}

Результат должен быть пустым.

  1. Удалить старый постоянный профиль:
Remove-Item 'C:\Users\iikoCard5POS' -Recurse -Force -ErrorAction SilentlyContinue

И временные профили:

Get-ChildItem C:\Users -Directory |
Where-Object {$_.Name -like 'TEMP.NT SERVICE*'} |
Remove-Item -Recurse -Force

Если папки заняты и не удаляются — перезагрузить Windows и удалить их до запуска iikoCard5 POS.

  1. Перезагрузить Windows.

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

Get-ChildItem C:\Users -Directory |
Where-Object {$_.Name -like '*iiko*' -or $_.Name -like 'TEMP.NT SERVICE*'}

Желательно, чтобы старых профилей уже не было.

  1. Запустить POS:
Start-Service iikoCard5POS

Подождать несколько секунд:

Start-Sleep 10

Проверить:

Get-ChildItem C:\Users -Directory |
Where-Object {$_.Name -like '*iiko*' -or $_.Name -like 'TEMP.NT SERVICE*'}

Должен появиться нормальный:

C:\Users\iikoCard5POS

а не новый TEMP.NT SERVICE.xxx.

И финальная проверка реестра:

Get-ChildItem $base |
Where-Object {$_.PSChildName -like "$SID*"} |
ForEach-Object {
    $x=Get-ItemProperty $_.PSPath
    [PSCustomObject]@{
        SID=$_.PSChildName
        Path=$x.ProfileImagePath
        State=$x.State
        RefCount=$x.RefCount
    }
}

Нормальная картина:

SID  : S-1-5-80-2089827238-...
Path : C:\Users\iikoCard5POS

Суть ремонта: NT SERVICE\iikoCard5POS имеет собственный SID. Если его профиль в ProfileList повреждается/переходит в .bak, Windows начинает выдавать службе временные TEMP.NT SERVICE.xxx. Полностью удаляем старую регистрацию профиля + каталог профиля, перезагружаемся и позволяем Windows создать профиль службы заново.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *