Вроде наблюдается лишнее преобразование типов, например
Код:
lpParameters := PWideChar(...);
эта переменная и так уже заявлена как указатель, попробуйте убрать общее приведение, а если это всё же необходимо относительно других переменных, то тогда лучше так
Код:
lpParameters := '-Xms' + PWideChar(Xms) + 'm '+ PWideChar(LogonInfo);
есть подозрение что косяк в этом
Добавлено позже
Плохой совет, не проверив ляпнул, извнт. Всё вроде сложнее - это одна из хреновостей делфи при работе с UNICODE. Получилось так, принимается что Xms и LogonInfo типа string
Код:
lpParameters := PWideChar('-Xms' + WideString(Xms) + 'm ' + WideString(LogonInfo));
а иначе "Suspicious typecast String to PWideChar" вылазит с обрезкой строки