Winform app命令行参数IndexOutOfRangeException

时间:2016-06-17 14:01:08

标签: c# winforms

我有一个winform应用程序,我将参数“1-2-c:\ temp-test”放入Project属性的Debug选项卡下的Command Line arguments文本框中。代码如下:

String[] arguments = Environment.GetCommandLineArgs();

string exeFilename = arguments[0]; 
string temp = arguments[1]; // return the argument string value. e.g."1-2-c:\temp-test" 



string[] args = temp.Split('-');
  try
        {
            string first = "", second="", third="", fourth = "";
            if (args != null && args.Count() > 0)
            {
                first = string.IsNullOrEmpty(args[0]) ? "1" : args[0];
                second = string.IsNullOrEmpty(args[1]) ? "2" : args[1];
                third = string.IsNullOrEmpty(args[2]) ? @"c:\temp\" : args[2];
                fourth = string.IsNullOrEmpty(args[3]) ? "test" : args[3];



            }
catch(Exception ex)
        {
            string argsTest  = "";
            if (!string.IsNullOrEmpty(args[0]))
                argsTest = args[0];
            if (!string.IsNullOrEmpty(args[1]))
                argsTest = argsTest + " "+ args[1];
            if (!string.IsNullOrEmpty(args[2]))
                argsTest = argsTest + " " + args[2];
            if (!string.IsNullOrEmpty(args[3]))
                argsTest = argsTest + " " + args[3];


            MessageBox.Show(argsTest + " \n Error:  " + ex.ToString());
        }

当我运行应用程序窗体visual studio时,它工作正常但是当我去bin \ debug并双击.exe文件时,我收到了IndexOutOfRangeException异常。

另一个观察结果,如果我使用命令提示符中的参数执行此exe,它可以正常工作。

双击我的exe文件时出现异常。

我搜索并花时间解决但没有得到任何解决方案。我完全陷入困境。任何类型的提示/代码/建议都是可观的。

4 个答案:

答案 0 :(得分:1)

当您通过.exe文件打开它时,您不会提供任何参数。确保在打开.exe时使用某种方法来提供参数(从命令提示符开始,或者在编译中进行硬编码)。

答案 1 :(得分:0)

如果需要从可执行文件运行,则必须传入命令行参数。这可以通过以下两种常见方式之一完成:

  1. 使用合适的参数创建一个调用可执行文件的批处理文件。
  2. 创建快捷方式并修改目标以在末尾添加参数。
  3. 另外,您应该检查您的参数是否已提供。即。

    if (arguments.Length >= 2)
    

答案 2 :(得分:0)

如果您希望在特定索引处找到项目,而不是args.Length,则应检查string.IsNullOrEmpty(args[...])

...
String first = (args.Length > 0) ? args[0] : "1";
String second = (args.Length > 1) ? args[1] : "2";
String third = (args.Length > 2) ? args[2] : @"c:\temp\";
String fourth = (args.Length > 3) ? args[3] : "test";

...

答案 3 :(得分:0)

在visual studio中设置调试命令不会将它们“嵌入”exe文件中。它只表示visual studio在启动exe进行调试时会传递这些参数。

双击exe将有效传递 no 参数,这意味着这条指令:

string exeFilename = arguments[0]; 

将生成您正在看到的异常。

快速解决方案是在程序之前测试参数的数量:

if(arguments.Lenght >= 4){
    //...do stuff...
}