2017-04-14 130 views
0

我有14個參數通過命令行傳入。然而,第一個似乎由於某種原因被切斷,並沒有達成startupeventargs.args。startupeventargs.args數組的限制?

StartupEventArgs e字符串數組的大小是多少?

protected override void OnStartup(StartupEventArgs e) 
{ 
    ParseArguments(e.Args); 
} 

private static void ParseArguments(string[] args) 
{ 
    //args[args.Length + 1] = "-sn"; 

    Log.Write("Parsing {0} arguments...", args.Length); 

    // Parse the command line arguments 
    for (int i = 1; i < args.Length; i++) 
    { 
     //test Log.Write(args[i]); 
     switch (args[i - 1]) 
     { 
      case "-sn": 
       // Parse the show name 
       ShowName = args[i]; 
       break; 

//... 

編輯: 它是從C++編寫的其他應用調用:

sprintf(szCommandLine, "-sn %n -sd %s -w %d -h %d -t %d -l %d -th %d", 
    szWebShow, szBaseDir, iWidth, iHeight, iTop, iLeft, threadID); 

if(CreateProcess(PLAYWEB_EXE,szCommandLine, NULL, NULL, FALSE, 
       DETACHED_PROCESS, NULL, NULL, &startInfo, &procInfo)) { 
    Log(LOGSTR("Web Show Started: %s ", szCommandLine)); 

命令行: (路徑.EXE)-sn 「M000018 \ 33.9999-2815-8-WS001」 -sd C:在C#\播放器\ Shows2 -w 1280個-h 720 -t 0 -l第0 1

+2

檢查您訪問的第一個項目是這樣的:'e.Args [0 ]'(因爲數組是基於零)或在foreach循環內 – WerWet

+0

我添加了我如何解析它 – john

+0

顯示如何從命令行調用它,是否像缺少引號那樣簡單? – tony

回答

2

數組是從零開始的,從docs

C#數組是零索引的;也就是說,數組索引從零開始

的數組索引需要在0開始:

for (int i = 0; i < args.Length; i++) 
{ 
    //..... 

編輯

現在您已經添加的你是如何調用解釋過程中,我可以看到你有一個問題。從上CreateProcess功能的文檔,第二個參數是命令行和:

如果兩個lpApplicationNamelpCommandLine是非NULL,則空終止字符串指向lpApplicationName指定模塊執行,由lpCommandLine指向的以空字符結尾的字符串指定命令行。

,你應該做的事情是這樣的:

CreateProcess(NULL, szCommandLine....) 

szCommandLine有可執行前綴,例如PLAYWEB_EXE -sn blah... etc

+0

switch(args [i - 1])<<這使得它從0開始。 – john

+0

@john查看我的更新 – DavidG

+0

我已經完成了喲建議但同樣的問題哈哈。 – john