Я пытаюсь реализовать способ запуска моего приложения WPF с конкретными аргументами через расписание задач Windows и CMD. Я добавил код ниже.
protected override void OnStartup(StartupEventArgs e)
{
Logger.Info(e.Args.Length);
for (int i = 0; i != e.Args.Length; ++i)
{
if (e.Args[i] == "test")
{
Logger.Info($"G");
}
else
{
Logger.Info($"B");
}
}
}
Когда я начинаю публиковать приложение и запускаю его через CMD или планирую его в расписании задач с аргументами, e.Args.Length равен 0. Но когда я добавляю аргумент в Properties > Debug > Command line arguments, он работает.
Есть идеи, что мне не хватает?
@GK Я пробовал это, но тут та же проблема
Похоже, вы создаете приложение ClickOnce, верно? Вы пробовали получить параметры с AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData?
@LittleBit Я только что пробовал, но получаю только NullReference
Как пробовали запустить приложение? Нравится формат, предоставленный Sham?
@LittleBit Да, я сделал





Для запуска приложения из cmd с аргументами команды используйте следующий формат -
C:\StackOverflow\Bin\Debug> StackOverflow.exe arg1 arg2
Я сделал, но все равно не работает. Это не EXE, а приложение. Имеет ли это значение?
@JasonLie Это приложение для однократного нажатия? Приложение вообще запустилось или возникла ошибка? Не могли бы вы поделиться командой?
Команда - это просто «Тест программы». Он запускается, но когда я печатаю длину массива аргументов, он говорит 0
В любом случае я могу изменить его на .exe при публикации?
@JasonLie Как вы создаете этот файл .Application? Насколько мне известно, он создается через ClickOnce, и будет другой механизм для отправки аргумента в приложение ClickOnce.
Я перешел в Build> Publish
@JasonLie Да, этот вариант предназначен для создания приложения clickonce. Вам понадобится другой механизм для отправки аргумента приложению clickonce. Пожалуйста, обратитесь по ссылке docs.microsoft.com/en-us/visualstudio/deployment/… для получения более подробной информации.
Вам необходимо использовать класс Environment в пространстве имен System и использовать метод GetCommandLineArgs() для получения аргументов.
Например,
Args = Environment.GetCommandLineArgs();
Согласно комментариям к вопросу, я предполагаю, что проблема в том, что начальные аргументы переданы неправильно. Приложение ClickOnce работает как файл .exe и не может быть запущено с параметрами из CMD по соображениям безопасности.
(Источник)
Я предлагаю вам взглянуть на это, он хорошо описывает, как аргументы могут быть переданы приложению через строки запроса.
Это то, что вы ищете stackoverflow.com/questions/11769113/…