что я делаю
В этом первом разделе описывается, почему я считаю, что этот вопрос не является дубликатом.Я пытаюсь получить некоторый вывод приложения форм C # windows в переменную в пакетном режиме.Однако есть несколько предостережений.Из-за требований этого проекта (он предназначен для работы) я не могу сделать временные файлы для простой записи в C # и чтения из пакета.Это потому, что это представляет угрозу безопасности для всего приложения, и это недопустимо.Другое предостережение заключается в том, что программа C # вызывается и запускается из командного файла с помощью команды START /WAIT
.Чтобы уточнить, я не единственный автор этого кода, я сделал большую его часть, отладил и протестировал ее, но этот код не полностью мой.Таким образом, «просто рефакторинг и использование чего-то более легкого» не является опцией в этой стадии разработкиКод хорошо работает по своему предназначению, мне просто нужно решить эту проблему.Эти предостережения, а также тот факт, что программа C # НЕ является консольным приложением, а является приложением для форм Windows, заставляет меня поверить, что этот вопрос не является дубликатом других вопросов по этой теме.Это потому, что я понимаю, как получить пакет, чтобы попытаться прочитать выходные данные программы (о чем были другие вопросы), но я не понимаю, что добавить в программу C #, чтобы пакет мог успешно читать (мой вопрос).
Для чего нужно приложение?
Я не буду вдаваться в подробности, потому что это, вероятно, не законно, но цель программы C # и пакетной программы в основном состоит в настройке машин Windows для нашегосетевой сервис, настраивая различные параметры Windows.часть C # необходима для паролей, что невозможно сделать в пакетном режиме, потому что в переменной нет способа иметь пароли специальных символов (пакетный режим интерпретирует их как команды, а не литералы, и нет простого способа обойти это).Поскольку наши пользователи должны иметь специальные символы в своих паролях, мы не можем использовать пакет для этой части программы.Проблема в том, что мне нужно знать, когда программа C # внезапно закрывается.Как форма окна, она имеет красную опцию X, которую можно выбрать до установки пароля.Пакетный файл должен знать, была ли программа C # закрыта досрочно, чтобы он мог сообщить пользователю предупреждение о том, что пароль не был установлен.Проблема в том, что я не могу понять, как получить вывод из приложения C # в пакет для отображения этого предупреждения.Если я не могу пометить условие предупреждения, я не могу отобразить предупреждение.
мое исследование
Я нашел этот вопрос: Назначить вывод программы переменной
Что дает мне хорошую отправную точку.Однако вместо общего вызова приложения я использовал команду start
, поскольку хотел, чтобы пакетный файл ожидал, прежде чем он продолжится с остальной частью процесса.Мой пакетный код при запуске из CLI (предположим, я нахожусь в каталоге исполняемого файла) выглядит так:
FOR /F "tokens=*" %A IN ('start /WAIT "" "<TheApplicationName>.exe"') DO (echo output line: "%A")
Очевидно, что в пакетном скрипте необходимо добавить дополнительные знаки процента, но для самого CLIэто нормально.
Проблема в том, что я не могу понять, какую команду в C # мне нужно выполнить, чтобы получить что-то для чтения из приведенного выше пакетного кода.Я пробовал Console.Writeline("something")
в своем главном классе C #, но это не вызвало ничего, что могло бы вылиться, когда я запустил программу через пакетный код.Я уверен, что пакетный код правильный, потому что он запускает приложение.
Шаги для запуска программы на C # следующие:
- cd в правильный каталог
- , запустите указанный выше пакетный код
- убедитесь, что приложение работает в полном объеме, как и должно (*) 10 *
- Обратите внимание, что ничего из программы не выводится, даже пустая строка (часть
DO
цикла FOR
кажется, ничего не выводится)
Итак, мой вопрос заключается в следующем: какую команду в C # мне нужно использовать, чтобы получить пакетный код для echo
ЧТО-ТО из моей программы.Я знаю, как использовать строку, как только получу ее, мне просто нужно сначала ее получить.Я чувствую, что либо это невозможно, потому что это приложение Windows Form, это можно сделать, но я просто не умен, или что операция чтения происходит слишком быстро (до того, как что-либо напечатано), и, таким образом, я получаюничего такого.Я не могу найти примеров того, какие команды пакетный код может «прочитать», поэтому я предположил, что это как-то связано с выводом на консоль или командами печати.
Предложения по улучшению вопроса приветствуются