Все команды — PowerShell от администратора.
- Узнать, под какой учёткой работает служба:
Get-CimInstance Win32_Service -Filter "Name='iikoCard5POS'" |
Select-Object Name, StartName, State
Нормально:
StartName : NT SERVICE\iikoCard5POS
- Узнать 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'
- Посмотреть существующие записи профиля:
$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
...
- Остановить 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 процессы.
- Если данные 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*"}
Результат должен быть пустым.
- Удалить старый постоянный профиль:
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.
- Перезагрузить Windows.
После перезагрузки проверить:
Get-ChildItem C:\Users -Directory |
Where-Object {$_.Name -like '*iiko*' -or $_.Name -like 'TEMP.NT SERVICE*'}
Желательно, чтобы старых профилей уже не было.
- Запустить 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 создать профиль службы заново.