0

我正在尝试通过命令行为我的应用程序创建某种自动登录。为此,我想到了以下方法:

myapp.exe /autologin -u "Username" -p "Password"

现在首先:这是正确的方法(在命名和开关方面?)其次:我怎样才能解析这个?

我已经尝试过,但是失败了(或者至少我认为我失败了,因为我必须手动进行字符串操作):

    internal static void SetStartupArguments(List<string> arguments)
    {
        IsApplicationWarmup = arguments.Contains("/warmup");
        IsApplicationAutoLogin = arguments.Contains("/autologin");

        if (IsApplicationAutoLogin)
        {
            int autoLoginIndex = arguments.FindIndex(0, str => str == "/autologin");

            if (arguments.Count >= autoLoginIndex + 1)
            {
                AutoLoginUser = arguments[autoLoginIndex + 1];
                AutoLoginPassword = string.Empty;
            }
        }
    }

另一件事是,这很容易出错。我不知道是 -u 还是 -p 开关先出现,所以我担心我最终会使用密码作为用户名,反之亦然。

4

2 回答 2

2

我建议使用 3rd 方库进行命令行参数解析——它可以让你的生活变得更简单。

例如,在Noda Time中,我们使用“命令行解析器库”,我们实际上将其嵌入到源代码中,而不是将其添加为程序集引用。它使用起来非常简单——你只需提供一个带有属性的类,来说明哪个命令行选项对应于哪个属性。您可以查看我们的 TZDB 编译器的选项作为示例。

当然,您的需求可能会有所不同,但很可能有一个库可以满足他们 - 如果没有,这表明您的需求实际上对于有用的命令行来说太复杂了,您可能需要一些其他方式配置您的应用程序,例如通过在命令行中指定的文件。

于 2013-06-26T13:20:49.037 回答
2

我会使用https://github.com/fschwiet/ManyConsole之类的东西,它是 NDesk.Options 的扩展,并且非常易于用于解析命令行。

例子:

   string data = null;
   bool help   = false;
   int verbose = 0;
   var p = new OptionSet () {
    { "file=",      v => data = v },
    { "v|verbose",  v => { ++verbose } },
    { "h|?|help",   v => help = v != null },
   };
   List<string> extra = p.Parse (args);
于 2013-06-26T13:21:21.620 回答