STSADM.exe - "Операция завершена успешно" - дважды?

Для такой команды:

C:\>stsadm -o upgradeSolution -name zzz.wsp -filename zzz.wsp -allowGacDeployment -local

Я получаю два вывода об успехе, а не только один:

Operation completed successfully.

Operation completed successfully.

Кажется, это связано с -local флаг, так что я думаю, что он успешно создает задание таймера, а затем запускает execadmsvcjobs под капотом.

stsadm -o execadmsvcjobs

Мысли об этом?

2 ответа

Решение

К сожалению, я не думаю, что это так увлекательно, как кажется...

В STSADM, если вы развертываете локальное решение (немедленно), происходит следующее (взломайте Reflector):

    base.DeployRetractSolution(solution, urls, userTypedIn, lcid, gacInstallWPPackDlls, true, force);
    base.OutputSucceedMessage();

Однако при развертывании решения в ферме (задание таймера) это происходит:

base.CreateSolnDeployTimerJob(strTime, immediate, solution, urls, userTypedIn, SPSolutionDeploymentJobType.Deploy, lcid, gacInstallWPPackDlls, force);

base.OutputSucceedMessage(); просто записывает локализованную языковую версию "Операция успешно завершена" на консоль.

Обе эти вещи работают под капотом, который генерирует STSADM SPOperation (и консольное сообщение "Операция успешно завершена"), но у ближайшего просто есть другая base.OutputSucceedMessage(); в теме.

Вам следует использовать обновление с осторожностью, поскольку оно не поддерживает добавление новых функций в пакет решений.

Также имейте в виду, что если вы используете -local, вы развертываете только в локальном WFE. Для согласованности я всегда использую -immediate и после завершения добавления заданий таймера запускаю stsadm -o execadmsvcjobs

Я не уверен насчет двух сообщений, но так как upgradedesolution - это двухэтапная операция, которая сначала добавляет новую версию старого решения, а затем добавляет ее, было бы разумно, именно поэтому вы получили два сообщения.

Другие вопросы по тегам