问题描述
我可以通过以下控制台应用程序传递参数列表
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或更早版本时需要做的事情。