Я верю, что проблема, с которой вы столкнулись, связана с тем, что вы используете статический член для доступа к объекту SPFarm. Я думаю, что это похоже на запуск статического класса SPcontext, который все еще будет работать в контексте безопасности вошедшего в систему пользователя, а не в контексте повышенных привилегий (который является локальной идентификационной информацией пула приложений).
Попробуйте вместо этого внутри вашего делегата:
SPFarm spFarm = SPWebService.AdministrationService.Farm;
SPSolution newSolution = spFarm.Solutions.Add(@fullPath);
EDIT:
Поскольку вышеописанное не помогло, ваша проблема, вероятно, связана с разрешениями базы данных для базы данных конфигурации. RunWithElevatedPriviliges будет работать под идентификатором пула приложений, под которым выполняется код. Добавление решения в вашу ферму влияет на базу данных конфигурации, поэтому вашему удостоверению пула приложений потребуется доступ к базе данных конфигурации. В качестве теста попробуйте добавить удостоверение пула приложений в config db и дать ему разрешения dbo. Если это решит проблему, вам нужно будет найти минимальное количество разрешений, которое потребуется каждой учетной записи пула приложений для добавления решений (не оставляйте как dbo)