Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 命令行参数可在visual studio中使用,但不能从visual Basic中WindowsForm项目的命令行中使用_Vb.net_Visual Studio 2010_Command Line Arguments - Fatal编程技术网

Vb.net 命令行参数可在visual studio中使用,但不能从visual Basic中WindowsForm项目的命令行中使用

Vb.net 命令行参数可在visual studio中使用,但不能从visual Basic中WindowsForm项目的命令行中使用,vb.net,visual-studio-2010,command-line-arguments,Vb.net,Visual Studio 2010,Command Line Arguments,我用visualbasic做了一个小程序。 它压缩文件并将文件上载到ftp服务器上。程序本身运行良好 我的问题是,如果它是否从命令行获取参数,我希望它具有不同的行为。如果给出了参数,则不显示表单,如果没有,则加载表单 从visual basic执行获取命令行参数的代码时工作正常(项目属性->调试->启动选项->命令行参数随文件路径设置) 但是当我用这行代码从cmd执行程序时: pogram.exe C:\Users\user\file.txt 该表单将显示,并且未检测到任何参数 这是发送的主要信

我用visualbasic做了一个小程序。 它压缩文件并将文件上载到ftp服务器上。程序本身运行良好

我的问题是,如果它是否从命令行获取参数,我希望它具有不同的行为。如果给出了参数,则不显示表单,如果没有,则加载表单

从visual basic执行获取命令行参数的代码时工作正常(项目属性->调试->启动选项->命令行参数随文件路径设置)

但是当我用这行代码从cmd执行程序时: pogram.exe C:\Users\user\file.txt

该表单将显示,并且未检测到任何参数

这是发送的主要信息。
模块1.vb:

   Module Module1

Declare Function AttachConsole Lib "kernel32" (ByVal dwProcessId As Int32) As Boolean
Declare Function FreeConsole Lib "kernel32.dll" () As Boolean

Sub Main()
    Dim cmdArgs As String() = GetCommandLineArgs()
    Form2.loadData()
    If cmdArgs.Length = 0 Then ' NO ARGS MODE
        mainWindow.commandLineMode = False
        Application.Run(mainWindow)
    ElseIf cmdArgs.Length < 3 And Form2.TXTnumLicence.Text = "" Then ' BAD ARGS NUMBER
        Console.WriteLine("Aucun numero de licence definit. Usage : ./ODG_exchange ['filePath'] [numeroLicence [default = ./ODG_param.xml > numero_licence]]")
        Application.Exit()
    Else ' ARGS MODE
        mainWindow.commandLineMode = True
        mainWindow.commandeLine(cmdArgs)
    End If
End Sub
模块1
将函数AttachConsole库“kernel32”(ByVal dwProcessId为Int32)声明为布尔值
将函数FreeConsole Lib“kernel32.dll”()声明为布尔值
副标题()
Dim cmdArgs作为字符串()=GetCommandLineArgs()
Form2.loadData()格式
如果cmdArgs.Length=0,则“无ARGS模式”
mainWindow.commandLineMode=False
Application.Run(主窗口)
ElseIf cmdArgs.Length<3,Form2.txtnumlience.Text=“”然后是“错误的ARGS编号”
Console.WriteLine(“Aucun numero de license definit.用法:./ODG_exchange['filePath'][numeroLicence[default=./ODG_param.xml>numero_license]]))
Application.Exit()
Else的ARGS模式
mainWindow.commandLineMode=True
mainWindow.commandeLine(cmdArgs)
如果结束
端接头

在VisualStudio中,我还将启动对象定义为Module1。也许它会有用。

始终有一个命令行arg—执行程序的文件名。
您需要将if语句更改为cmdArgs.length=1。7天后,我找到了解决方案。。。只需使用good.exe,它的工作原理与visual studio中的一样好


我觉得自己好笨,谢谢你的帮助

GetCommandLineArgs
是不是,对吧?这确实有点可疑。另外,“将启动对象定义为Module1”,这是不可能的。此问题的差异太多。确实是。GetCommandLineArgs。我想这是可能的设置启动对象有模块1,因为我这样做了。编辑:我仔细查看了为什么您说这是不可能的,我在ProjectPropertiesIndeed中禁用了ApplicationFramework复选框。我以前以另一种方式使用了args,我修改了代码的其余部分,但忘记了这一行。我把它修好了,但还是不行。谢谢你的尝试