【问题标题】:WPF app debug argument runs OK but is ignored on CMDWPF 应用程序调试参数运行正常,但在 CMD 上被忽略
【发布时间】:2018-10-31 10:35:38
【问题描述】:

我有一个 WPF 应用程序,它需要获取一个允许选择它必须显示的屏幕的参数。 当我在“项目右键单击-> 属性-> 调试”上使用“命令行参数”功能时,它就像一个魅力。当我发布应用程序并尝试使用 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;
        }
    }

我错过了什么吗?我正在使用下一行来启动应用程序(它确实启动了,但参数始终是默认参数): 应用名称 1 另外,我肯定有超过 1 个屏幕。

使用日志输出进行编辑:

2018-10-31 12:42:20,366 [1] 调试应用程序 - 参数:0

2018-10-31 12:42:20,396 [1] 调试应用程序 - 屏幕:0

2018-10-31 12:42:20,401 [1] DEBUG App - 屏幕数:2

【问题讨论】:

  • 不读为 0。0 是 默认值if (e.Args.Length == 1) 表示如果有 more 多于 1 个参数,所有参数都会被忽略。至少将条件更改为>0,并添加一个记录整个事件的日志语句
  • @PanagiotisKanavos 我改变了代码,你可以看到我得到的参数(Args)的数量是 0。

标签: c# wpf


【解决方案1】:

好的,所以似乎使用对应用程序的引用不起作用。 我已经把完整的路线放到了应用程序中,它确实有效。它应该类似于: C:\Users\SMACS\AppData\Local\Apps\2.0\MMA17POZ.R0G\PHXLDOK5.2Y8\pane..tion_d85c1227db19dafd_0001.0000_ae3906090ab02453

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-09
    • 2013-03-01
    • 2020-07-08
    • 2018-04-29
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多