Как проверить значение Process ExitCodeC#

Место общения программистов C#
Ответить
Гость
 Как проверить значение Process ExitCode

Сообщение Гость »

У меня есть механизм, позволяющий завершить процесс в некоторых случаях. Для *.exe требуется *.dll. Все работает нормально в производстве и в NCrunch (если для параметра «Копировать ссылочные сборки в рабочую область» установлено значение true). К сожалению, я не могу заставить его работать в обозревателе тестов VisualStudio.
Мой тест аварийно завершает работу сразу после запуска. Я ожидаю конкретный код выхода с определенным значением, но всегда получаю -532462766.
Изображение

Я запускаю процессы в зависимости от местоположения сборки:
Изображение

Речь идет о DLL. Системные журналы подтверждают отсутствие файлов.
Изображение

Изображение

Если я захватываю консоль, это подтверждает, что речь идет об отсутствующих DLL. Конечно, в реальном сценарии консоль/форма/окна не появляются, это просто упрощенное решение.
[img]https://i.stack .imgur.com/6gaEj.png[/img]

Я проверил заданное временное местоположение, созданное с помощью инструмента тестирования, и заметил, что *.exe находится в другой подпапке, чем DLL. Я думаю, *.exe не знает, как ссылаться на них, поскольку они не находятся в своем обычном относительном расположении. NCrunch хранит все файлы в основном временном каталоге, поэтому работает.
Как это проверить? Я не хочу создавать оболочку Environment, чтобы издеваться над ней. Я не хочу по-настоящему проверять, запускается ли процесс и может ли он завершиться при выполнении некоторых определенных условий.
Вот очень упрощенная версия моего проекта:
Изображение

Основной проект ( Внешнийпроцесс)

namespace ExternalProcess {
public class Program {
public static void Main(string[] args) {

CommonCode.Enums.ProcessType processType = (CommonCode.Enums.ProcessType)Enum.Parse(typeof(CommonCode.Enums.ProcessType), args[0]);

switch (processType) {
case CommonCode.Enums.ProcessType.TEST:
case CommonCode.Enums.ProcessType.PROD:
case CommonCode.Enums.ProcessType.DEV:
Environment.Exit((int)processType);
break;
default:
Environment.Exit((int)CommonCode.Enums.ProcessType.ERROR);
break;
}
}
}
}

Дополнительная DLL (ExternalProcess.CommonCode)
namespace ExternalProcess.CommonCode.Enums {
public enum ProcessType {

PROD,
TEST,
DEV,
ERROR
}
}

Тестовый проект (ExternalProcessTests)
using System.Reflection;
using FluentAssertions;
using Xunit;

namespace ExternalProcessTests {
public class ProcessTests {

[Fact]
public void TestProcess() {

var processType = ExternalProcess.CommonCode.Enums.ProcessType.TEST;

var process = new System.Diagnostics.Process {
EnableRaisingEvents = false
};

process.StartInfo.FileName = Assembly.GetAssembly(typeof(ExternalProcess.Program)).Location;
process.StartInfo.UseShellExecute = true;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.Arguments = processType.ToString();

process.Start();

process.WaitForExit();

process.HasExited.Should().BeTrue();
process.ExitCode.Should().Be((int)processType);
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/781 ... code-value
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»