Аргумент отладки приложения wpf работает нормально, но игнорируется в cmd

У меня есть приложение WPF, которому нужно получить параметр, позволяющий выбрать экран, который он должен отображать. Это работает как шарм, когда я использую функцию «Аргументы командной строки» в «Project right click -> Properties -> Debug». Проблема возникает, когда я публикую приложение и пытаюсь передать аргумент с помощью CMD, потому что он полностью игнорируется . Вот код: App.xaml.cs класс

  private void Application_Startup(object sender, StartupEventArgs e)
        {
            log4net.Config.XmlConfigurator.Configure();
            log.Debug("Paramerters: " + e.Args.Length);
            foreach (var parameter in e.Args )
            {
                log.Debug("Arg " + parameter);
            }
            var screen = 0;
            if (e.Args.Length > 0)
            {
                if(Int32.TryParse(e.Args[0], out screen))
                {
                    log.Debug("Parameter: " + screen);
                } else
                {
                    log.Debug("Invalid parameter : " + e.Args[0]);
            }
        }

        log.Debug("Screen: " + screen);
        App.Current.Properties["Screen"] = screen;
        log.Debug("Screens count: " + System.Windows.Forms.Screen.AllScreens.Length);

        if (screen >= System.Windows.Forms.Screen.AllScreens.Length)
        {
            log.Debug("Error screens count: " + System.Windows.Forms.Screen.AllScreens.Length);
            App.Current.Shutdown();
        }
        else
        {
            var screen1 = App.Current.Properties["Screen"];
            MainWindow mainWindow = new MainWindow();
            var screenBounds = System.Windows.Forms.Screen.AllScreens[screen].Bounds;
            mainWindow.Left = screenBounds.Left;
            mainWindow.Top = screenBounds.Top;
            mainWindow.Show();
            mainWindow.WindowState = WindowState.Maximized;
        }
    }

Я что-то упускаю? Я использую следующую строку для запуска приложения (оно запускается, но аргумент всегда используется по умолчанию): AppName 1 Кроме того, у меня наверняка больше одного экрана.

Отредактируйте с выводом журналов:

2018-10-31 12: 42: 20,366 [1] Приложение DEBUG - Параметры: 0

2018-10-31 12: 42: 20,396 [1] Приложение DEBUG - Экран: 0

2018-10-31 12: 42: 20,401 [1] Приложение DEBUG - Количество экранов: 2

Он не читается как 0. 0 - это значение дефолт. if (e.Args.Length == 1) означает, что если более больше 1 аргумента, все они игнорируются. Измените условие как минимум на >0 и добавьте оператор регистрации, который регистрирует все событие

Panagiotis Kanavos 31.10.2018 11:38

@PanagiotisKanavos Я изменил код, и, как вы можете видеть, количество имеющихся у меня параметров (аргументов) равно 0.

Antoni Cuenca 31.10.2018 12:47
1
2
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, похоже, использование ссылки на приложение не работает. Я указал полный путь к приложению, и оно работает. Это должно быть примерно так: C: \ Users \ SMACS \ AppData \ Local \ Apps \ 2.0 \ MMA17POZ.R0G \ PHXLDOK5.2Y8 \ pane..tion_d85c1227db19dafd_0001.0000_ae3906090ab02453

Другие вопросы по теме