是否可以从WinForms VB.net传递Argumentlist?

问题描述

我可以通过以下控制台应用程序传递参数列表

Public Class test
  Public myProcess As processstartinfo = New processstartinfo

    Sub Main()
        With myProcess

            .FileName = <<some path>>
            For Each x As String In <<some list>>
                .Argumentlist.add(x)
            Next
            WorkingDirectory = args
            .UseShellExecute = False
        End With
    End Sub
End class

但是在WinForms项目中工作时,我无法访问.argumentList,而只能访问.arguments:(

解决方法

我可以通过以下控制台应用程序传递参数列表

我不这么认为。我可以看到的任何地方都没有ArgumentList属性。使用Process.Start时,基本上只是复制了要使用控制台窗口时的操作。如果要在控制台窗口中启动这样的应用程序:

MyApp -a \ b“ C:\ Some Folder \ Some File.ext”

然后,您基本上只需要在代码中复制即可。 MyApp 部分是FileName,其余部分是Arguments

Dim psi As New ProcessStartInfo("MyApp","-a \b ""C:\Some Folder\Some File.ext""")

如果您有一组参数,则只需将它们连接成一个空格分隔的String

Dim psi As New ProcessStartInfo("MyApp",String.Join(" ",myArgumentList))

编辑:

所引用的ArgumentList属性仅在.NET Core中受支持,而在.NET Framework中不受支持。它在控制台应用程序项目中可用与特定的项目类型无关,而与目标平台无关。如果在控制台应用程序项目中定位.NET Framework,则该属性也将不可用;如果在Windows窗体应用程序项目中定位.NET Core,则该属性也将不可用(尽管您可以在C#中使用VB进行此操作)那么该属性也将在那里可用。

您真的应该学习相对较新的.NET Core和从一开始就存在的.NET Framework之间的区别,并确保在所有项目中都针对正确的选项。当发布.NET 5.0时,它将不再是一个问题。我不确定所有细节,但它们基本上是在该版本中合并.NET Core和.NET Framework。

最后,无论项目类型如何,我提供的解决方案都是在定位.NET Framework 4.8或更早版本时需要做的事情。