我想在天蓝色的环境中建立一个负载测试装置。我为2个角色创建了2个项目,让实例下载并设置TestAgent和TestController。 这对测试代理非常有用!
但它不适用于Controller-setup:我创建了一个运行.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具有管理权限......
祝你好运 塞巴斯蒂安
编辑:我搜索了Windows事件日志,发现我的CMD已执行,但没有关于testcontroller.rexe的安装。
答案 0 :(得分: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置于下面。我还将文件属性设置为“始终复制”,因此它们是包的一部分。
第3步:这是我的Statup.cmd:
@ECHO ON
@ECHO "Launcher"
md C:\temp
Startup\ConsoleApp.exe >> C:\temp\out.log
exit /b 0
步骤4:现在当我将应用程序和远程部署到我的机器中时,我可以看到我的驱动器C:创建了一个 temp 文件夹,里面有out.log以及时间戳文件创建时。
您可以尝试完全相同,以查看您的控制台应用程序TestController是否先执行,然后修改批处理文件以获取更多功能。
答案 1 :(得分: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"
希望它也可以帮助别人。