У меня есть служба C #, работающая в качестве учетной записи LocalSystem, которая запускает множество других процессов в зависимости от своих потребностей. Это идет хорошо в течение нескольких месяцев. Только на этой неделе некоторые из подпроцессов терпят крах. Я подключил к ним удаленный отладчик, и им не удается распределить память (оператор C ++ new возвращает 0x0), что является косвенной причиной сбоя.
Забавно, что, если я включу RDP в машину, я могу легко запустить процесс из CMD без проблем. Тем не менее, когда служба запускает его, нет дела.
Машина работает под управлением Windows XP SP3. Это не из за коммитов около 80% физического ОЗУ.
Существуют ли какие-то особые ограничения на количество процессов или объем памяти, которые могут быть использованы службой, включая процессы, порожденные этой службой ??
Любые другие идеи, почему эти процессы не смогли бы выделить память.
EDIT:
Я хорошо посмотрел сценарий сбоя Procmon из SysInternals, и он ничего не показывает (что я вижу). Все выглядит так, как будто все идет нормально, затем внезапно вылетает. Я могу подтвердить от присоединения удаленного отладчика, что он падает после разыменования нулевого указателя из нового вызова c ++. Это один из первых объектов, размещенных в приложении, он никогда не должен завершаться ошибкой.
Я также обнаружил, что если я включаю параметр «Службы»: разрешить службам взаимодействовать с рабочим столом, то все дочерние процессы запускаются корректно. Однако, do появляются на рабочем столе при подключении через RDP и, к сожалению, прекращаются, если вы выходите из системы через RDP = YUK! Это все еще не идеальное решение - мне бы очень хотелось узнать, почему дочерние процессы не смогли выделить память после 6-го дочернего процесса.