2013-06-26 4 views
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 스위치가 먼저 온다고 말할 수 없으므로 내 두려움은 사용자 이름으로 암호를 사용하게되고 그 반대도 마찬가지입니다.

+0

당신이 다음 인수 -u''발생할 때 난 그냥 인수를 반복하고 거라고는 사용자입니다 '-p'를 만나면 다음 인수는 암호입니다. – Joey

+0

Regex를 사용하여 유효성 검사 논리를 적용 할 수 있습니다. 이 응용 프로그램은 콘솔 응용 프로그램입니까 아니면 winforms 응용 프로그램입니까? 콘솔을 사용하면 main에 대한 진입 점이 내장 된 매개 변수/인수 처리를 갖습니다. – ApolloSoftware

답변

2

커맨드 라인 인수 분석을 위해 제 3 자 라이브러리를 사용하는 것이 좋습니다. 그러면 훨씬 간단해질 수 있습니다.

예를 들어, 에서 "Command Line Parser Library"을 사용합니다. 실제로는 어셈블리 참조로 추가하는 대신 원본에 포함합니다. 사용하기가 매우 간단합니다. 클래스에 속성을 제공하여 어떤 명령 행 옵션이 어떤 속성에 해당하는지 말할 수 있습니다. 예를 들어 options for our TZDB compiler을 볼 수 있습니다.

필요에 따라 다를 수 있지만 만족할만한 라이브러리가있는 것 같습니다. 그렇지 않은 경우에는 사용자의 요구 사항이 실제로는 유용한 명령 행에 너무 복잡하다는 것을 의미합니다. 애플리케이션을 구성하는 다른 방법, 예. 커맨드 라인에서 지정된 파일을 통해.

2

나는 NDesk.Options의 확장자 인 https://github.com/fschwiet/ManyConsole을 사용하고 명령 행을 구문 분석하기 위해 사용하기 쉽습니다.

예 :

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);