1

我想在 azure 中建立一个负载测试台。我为 2 个角色创建了 2 个项目,并让实例下载并设置了 TestAgent 和 TestController。这对测试代理非常有用!

但它不适用于控制器设置:我创建了一个运行 .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="elevated" 具有管理权限...

最好的问候塞巴斯蒂安

编辑:我搜索了 Windows 事件日志,发现我的 CMD 已执行,但没有安装 testcontroller.rexe。

图1 图2

4

2 回答 2

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 步:创建一个启动文件夹来放置 ConsoleApp.exe 和 Startup.cmd,如下所示。我还将文件属性设置为“始终复制”,因此它们是包的一部分。

在此处输入图像描述

第 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 是否首先执行,然后修改您的批处理文件以获得更多功能。

于 2013-04-11T19:05:28.860 回答
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"

希望它也对其他人有所帮助。

于 2013-04-13T09:42:17.860 回答