2013-04-11 3 views
1

Я хочу создать нагрузочную тестовую установку в лазуре. Я создал 2 проекта для 2-х ролей и позволяет экземплярам загружать и настраивать TestAgent и TestController. Это очень полезно для тестового агента!CMD-файл реагирует по-разному как задача запуска и ручное выполнение через RDP

Но это не работает для настройки контроллера: я создал задачу запуска, которая запускает .cmd-файл, который загружает и устанавливает TestController. Странно: Файл cmd выполняется (проверен журналами в outfile), но он не устанавливает TestController. Теперь, когда ich RDP на экземпляре и запустить cmd-файл вручную, все работает отлично!

Это мой стартап определение задачи:

<WorkerRole name="TestController" vmsize="ExtraSmall"> 
    <Startup> 
     <Task executionContext="elevated" taskType="simple" commandLine="setupController.cmd"></Task> 

Я также пробовал с TaskType фоне, ничего по-другому.

И это мой командный файл:

powershell $command = "set-executionpolicy Unrestricted" 
powershell $command = ".\setupController.ps1" -NonInteractive >; out.txt 
echo Setup TestController >> out.txt 
.\testcontroller.exe /full /q >> out.txt 
echo Setup was executed! >> out.txt 
net user vstestagent password! /add 
net localgroup Administrators vstestagent /add 
REM Create a task that will run with full network privileges. 
net start Schedule 
schtasks /CREATE /TN "Configure Test Controller Service" /SC ONCE /SD 01/01/2020 /ST 00:00:00 /RL HIGHEST /RU vstestagent /RP password! /TR e:\approot\configcontroller.cmd /F 
schtasks /RUN /TN "Configure Test Controller Service" 

Кто-нибудь знает эту проблему? Я думал, что это может быть проблема привилегий, но ExecutionContext = «возвышенные» RINS с административными привилегиями ...

С наилучшими пожеланиями Sebastian

Edit: я искал журнал событий Windows, и обнаружил, что мой CMD выполняется, но ничего об установке testcontroller.rexe.

pic1 pic2

+0

Вы видите что-либо в журнале событий Windows или журналах установки, указывающих на сбой любого типа? –

+0

Hum, довольно новый для Windows Server. Как вы думаете, где в Event Viewer я должен искать? Не знаю, с чего начать. – sebastian87

ответ

0

Я все еще не знаю, ПОЧЕМУ, что это так, но установка работает, если вы делаете это через запланированную задачу.

Поскольку я думал, что единственное различие - возможно, учетная запись, устанавливающая программное обеспечение, я сначала попытался установить контрольный контроллер через команду runas, но я не смог передать пароль вместе с командой. Поэтому я создал запланированную задачу для установки тестового контроллера и смог передать учетные данные пользователя вместе с командой. Теперь моя setupController.cmd выглядит так:

powershell $command = "set-executionpolicy Unrestricted" 
powershell $command = ".\setupController.ps1" -NonInteractive >; out.txt 
echo Setup TestController >> %~dp0out.txt 
cd E:\approot 
echo Setup has been executed! >> %~dp0out.txt 
net user vstestagent MyPassword! /add 
net localgroup Administrators vstestagent /add 
REM Create a task that will run with full network privileges. 
net start Schedule 
schtasks /CREATE /TN "Install Test Controller Service" /SC ONCE /SD 01/01/2020 /ST 00:00:00 /RL HIGHEST /RU vstestagent /RP MyPassword! /TR "E:\approot\testcontroller.exe /full /q /Log %~dp0install.log" /F 
schtasks /RUN /TN "Install Test Controller Service" 
timeout /T 120 
schtasks /CREATE /TN "Configure Test Controller Service" /SC ONCE /SD 01/01/2020 /ST 00:00:00 /RL HIGHEST /RU vstestagent /RP MyPassword! /TR e:\approot\configcontroller.cmd /F 
schtasks /RUN /TN "Configure Test Controller Service" 

Надеюсь, это поможет и кому-то еще.

0

На основании выше, я могу думать от одной проблемы в том, что, когда ваш пакетный файл выполняется, testcontroller.exe не в правильном пути, так что не найден будет выполняться. Как только вы настроите повышенный вариант, ваше приложение должно работать точно.

Я только что собрал сценарий быстрой проверки, чтобы запустить консольное приложение, которое просто возвращает строку, которая может быть сохранена путем перенаправления и запущена из задачи запуска.

Шаг 1: Создан простой ConsoleApp, как показано ниже:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Todays date & time is {0}", DateTime.Now); 
     } 
    } 
} 

Шаг 2: Дата создания папки Startup разместить ConsoleApp.exe и STARTUP.CMD, как показано ниже. Я также устанавливаю свойства файлов «копировать всегда», чтобы они были частью пакета.

enter image description here

Шаг 3: Вот мой Statup.cmd:

@ECHO ON 
@ECHO "Launcher" 
md C:\temp 
Startup\ConsoleApp.exe >> C:\temp\out.log 
exit /b 0 

Шаг 4: Теперь, когда я развертывания приложения и удаленный в моей машине, я мог видеть, что темп папке создан мой диск C: и внутри есть out.log вместе с меткой времени, когда файл был создан.

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

+0

Хорошо, это странно. Я сделал шаги, которые вы упомянули, и он отлично работает, за исключением того, что файл .exe не выполняется. В нем есть папка C: \ temp с out.log, но out.log пуст. Похоже, что исполняемые файлы не выполняются из пакетных файлов -> почему? – sebastian87

+0

Тиги становятся еще более странными, потому что у меня есть другая роль, которая устанавливает тестовый тест через задачу запуска. Это все равно, те же пакетные файлы и так далее. Testagent устанавливается, testcontroller нет, даже мое приложение тестовой консоли не выполняется ... – sebastian87

+0

Исполняемые исполняемые файлы из Batch-файла, однако, если вы удалитесь в Azure VM, вы можете запустить тот же исполняемый файл непосредственно в CMD-строке, чтобы убедиться, что он выполняет и создается новый out.log? – AvkashChauhan