vb.net - 是否可以从 WinForms VB.net 传递 Argumentlist?
问题描述
我可以在控制台应用程序中传递 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,如下所示
我不这么认为。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 为目标(您目前还不能在 VB 中执行此操作,尽管您可以使用 C#)那么该属性也将在那里可用。
您确实应该了解相对较新的 .NET Core 和从一开始就存在的 .NET Framework 之间的区别,并确保您在所有项目中都针对正确的选项。当 .NET 5.0 发布时,这将不再是一个问题。我不确定所有细节,但它们基本上是在该版本中合并 .NET Core 和 .NET Framework。
最后,我提供的解决方案是您在面向 .NET Framework 4.8 或更早版本时需要执行的操作,无论项目类型如何。
推荐阅读
- razor - ASP.NET Core - 像 MVC 一样的脚手架标识
- c++ - 使用 curlpp 设置 SSL 记录的最大片段长度协商
- php - 无法将现有表用于 laravel Eloquent
- java - 使用 JAR 文件中的静态变量
- asp.net - Automapper 和 System.ValueTuple 依赖/版本控制问题
- powershell - 如何使用修改后的日期处理 Powershell 或 Batch 提取文件列表
- python - 向数据框添加多列并跳过空值
- c# - 我可以在任务被取消之前处理 CancellationTokenSource 吗?
- php - 如何确保 mysqli 准备语句是正确的?
- objective-c - Obj-C UIDownpicker 将在滚动期间用另一个值填充另一个文本字段