как заставить MSTest запускаться от имени администратора при вызове из консольного приложения? - PullRequest
1 голос
/ 17 сентября 2010

Этот код консольного приложения вызывает MSTest и начинает запускать модульное тестирование, но завершается с ошибкой «Отказано в доступе» к некоторым сборкам, необходимым для модульного тестирования (см. Код ошибки ниже). Есть ли какой-нибудь способ плавно заставить MSTest работать от имени администратора?

Я попробовал манифест, ничего не изменил, так как манифест относится к вызывающему приложению, а не к mstest, верно?

Также попытался указать ProcessStartInfo.Username и Password, но Password требует какой-то особой SecureString, и это НЕ приложение интерактивной консоли, оно вызывается SVN на хуке перед фиксацией.

    private static string MSTest()
    {
        if (File.Exists(@"C:\temp\TestProject1.trx"))
        {
            File.Delete(@"C:\temp\TestProject1.trx");
        }

        Process process = new Process();
        ProcessStartInfo psi = new ProcessStartInfo();
        psi.FileName = @"C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\MSTest.exe";
        psi.Arguments = String.Format
            (
            "/testcontainer:{0} /resultsfile:{1} /nologo",
            @"C:\Users\johndoe\Documents\SVN_TEST\Test\branches\johndoe\WebApplication1\TestProject1\bin\Debug\TestProject1.dll",
            @"C:\temp\TestProject1.trx"
            );
        psi.UseShellExecute = false;
        psi.RedirectStandardOutput = true;
        psi.RedirectStandardError = true;
        process.StartInfo = psi;
        process.Start();
        string output = process.StandardOutput.ReadToEnd();
        process.WaitForExit();
        return output;
    }

Ошибка: фиксация не удалась (подробности следуют):
Ошибка: фиксация заблокирована ловушкой предварительной фиксации (код выхода 1) с выводом:
Ошибка: загрузка C: \ Users \ johndoe \ Documents \ SVN_TEST \ Test \ branch \ johndoe \ WebApplication1 \ TestProject1 \ bin \ Debug \ TestProject1.dll ...
Ошибка: запуск выполнения ...
Ошибка:
Ошибка: результаты тестов верхнего уровня
Ошибка: ------- ---------------
Ошибка: сбой TestProject1.BankTest.DebitTest
Ошибка: 0/1 тестов пройдено, 1 не пройдено
Ошибка:
Ошибка: сводка
Ошибка: -------
Ошибка: сбой тестового прогона.
Ошибка: Ошибка 1
Ошибка: ---------
Ошибка: всего 1
Ошибка: файл результатов: C: \ temp \ TestProject1.trx
Ошибка: настройки теста: настройки теста по умолчанию
Ошибка:
Ошибка: Запуск имеет следующие проблемы:
Ошибка: Предупреждение: проблема с развертыванием тестового прогона: не удалось развернуть зависимости для теста
Ошибка: хранилище
Ошибка: 'c: \ users \ johndoe \ documents \ svn_test \ test \ branch \ johndoe \ webapplication1 \ testproject1 \ bin \ debug \ testproject1.dll':
Ошибка: System.IO.FileLoadException: не удалось загрузить файл или сборку
Ошибка: 'Microsoft.VisualStudio.QualityTools.Tips.UnitTest.AssemblyResolver,
Ошибка: версия = 10.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'или одна из
Ошибка: ее зависимости. Доступ запрещен.
Ошибка: Имя файла: 'Microsoft.VisualStudio.QualityTools.Tips.UnitTest.AssemblyResolver,
Ошибка: версия = 10.0.0.0, культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a '
Ошибка: в System.Reflection.RuntimeAssembly._nLoad (AssemblyName fileName, String
Ошибка: codeBase, Evidence AssemblySecurity, Местоположение RuntimeAssemblyHint,
Ошибка: StackCrawlMark & ​​stackMark, Boolean throwOnFileNotFound, Boolean
Ошибка: для самоанализа, логическое подавление проверки безопасности)
Ошибка: в System.Reflection.RuntimeAssembly.nLoad (AssemblyName fileName, String
Ошибка: codeBase, сборка доказательств безопасности, место выполнения, сборка, подсказка,
Ошибка: StackCrawlMark & ​​stackMark, Boolean throwOnFileNotFound, Boolean
Ошибка: forIntrospection, Boolean suppressSecurityChecks)
Ошибка: в System.Reflection.RuntimeAssembly.InternalLoadAssemblyName (AssemblyName
Ошибка: AssemblyRef, Evidence AssemblySecurity, StackCrawlMark & ​​stackMark, Boolean
Ошибка: forIntrospection, Boolean suppressSecurityChecks)
Ошибка: в System.Reflection.RuntimeAssembly.InternalLoad (String assemblyString,
Ошибка: доказательство сборки безопасности, StackCrawlMark & ​​stackMark, Boolean forIntrospection)
Ошибка: в System.Activator.CreateInstance (String assemblyName, String typeName,
Ошибка: логическое значение ignoreCase, BindingFlags bindingAttr, Binder Binder, Object [] args,
Ошибка: CultureInfo culture, Object [] активацияAttributes, Evidence securityInfo,
Ошибка: StackCrawlMark & ​​stackMark)
Ошибка: в System.Activator.CreateInstance (String assemblyName, String typeName,
Ошибка: логическое значение ignoreCase, BindingFlags bindingAttr, Binder Binder, Object [] args,
Ошибка: CultureInfo culture, Object [] активацияAttributes, Evidence securityInfo)
Ошибка: в System.AppDomain.CreateInstance (String assemblyName, String typeName,
Ошибка: логическое значение ignoreCase, BindingFlags bindingAttr, Binder Binder, Object [] args,
Ошибка: CultureInfo culture, Object [] activAttributes, Evidence securityAttributes)
Ошибка: в System.AppDomain.CreateInstanceAndUnwrap (String assemblyName, String
Ошибка: typeName, логическое значение ignoreCase, BindingFlags bindingAttr, связыватель связывателя, Object [] 10]* Ошибка: args, CultureInfo culture, Object [] activAttributes, Evidence securityAttributes)
Ошибка: в System.AppDomain.CreateInstanceAndUnwrap (String assemblyName, String
Ошибка: typeName, логическое значение ignoreCase, BindingFlags bindingAttr, связыватель объекта, связыватель,]
Ошибка: args, CultureInfo culture, Object [] ActivationAttributes, Evidence securityAttributes)
Ошибка: at
Ошибка: Microsoft.VisualStudio.TestTools.Utility.AssemblyLoadStrategy.GetDependentAssemblies (String
Ошибка: путь)
Ошибка: в
Ошибка: Microsoft.VisualStudio.TestTools.Utility.AssemblyHelper.GetDependentAssemblies (String
Ошибка: путь, параметры DependentAssemblyOptions, строка конфигурации файла)
Ошибка: в
Ошибка:Microsoft.VisualStudio.TestTools.TestManagement.DeploymentManager.GetDependencies (String
Ошибка: master, String configFile, TestRunConfiguration runConfig, DeploymentItemOrigin
Ошибка: dependencyOrigin, список 1 dependencyDeploymentItems, Dictionary 2 отсутствующих зависимых элементов: 1076 * 2: ошибки 1077 *: ошибкиОшибка: Microsoft.VisualStudio.TestTools.TestManagement.DeploymentManager.ProcessNewStorage (String
Ошибка: testStorage, помощник DeploymentHelper, DeploymentItemOriginType originType,
Ошибка: список 1 deploymentCoverageItems, TestRunConfiguration runConfig, List 1
Ошибка: зависимый словарь для исключения

Ответы [ 2 ]

1 голос
/ 17 сентября 2010

Вы можете передать пароль безопасной строки, выполнив следующие действия:

if (!String.IsNullOrEmpty(Password))
{
    SecureString pwd = new SecureString();
    for (int i = 0; i < Password.Length; i++)
    {
        pwd.AppendChar(Password[i]);
    }
    process.StartInfo.Password = pwd;
}
1 голос
/ 17 сентября 2010

Попробуйте добавить это

Process process = new Process();
process.StartInfo.Verb = "runas";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...