2017-04-14 129 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