我有一个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文件时出现异常。
我搜索并花时间解决但没有得到任何解决方案。我完全陷入困境。任何类型的提示/代码/建议都是可观的。
答案 0 :(得分:1)
当您通过.exe文件打开它时,您不会提供任何参数。确保在打开.exe时使用某种方法来提供参数(从命令提示符开始,或者在编译中进行硬编码)。
答案 1 :(得分:0)
如果需要从可执行文件运行,则必须传入命令行参数。这可以通过以下两种常见方式之一完成:
另外,您应该检查您的参数是否已提供。即。
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...
}