我在尝试使Environment.GetCommandLineArgs()StartupNextInstance事件中工作的方式遇到麻烦,就像在窗体的Load事件中那样。下面的代码检查应用程序是否获取了命令行参数,并将文件路径发送到FileOpen()函数,该函数基本上通过将文件名用作其参数来在程序中打开文件。

If Environment.GetCommandLineArgs().Length > 1 Then FileOpen(Environment.GetCommandLineArgs(1))


上面的代码在Load事件中可以很好地工作,尽管在StartupNextInstance事件中不能工作。我还尝试了以下代码来获取命令行args的文件路径:

Private Sub MyApplication_StartupNextInstance(sender As Object, e As ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
    Dim strFile As String = Environment.CommandLine
    If strFile.Length > 0 Then frmMain.FileOpen(strFile)
End Sub


上面代码的问题是,它没有获取文件路径,而不是获取用于打开程序的文件(使用Open with ...方法,当您右键单击文件时),它将打开程序的exe文件的位置。

当我尝试使用e.CommandLine时,出现错误消息:


类型'System.Collections.ObjectModel.ReadOnlyCollection(Of String)'的值不能转换为'String'。

最佳答案

您可以处理应用程序的StartupNextInstance event并使用e.CommandLine参数来检索所有新传递的参数的列表。

Private Sub MyApplication_StartupNextInstance(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs) Handles Me.StartupNextInstance
    If e.CommandLine.Count > 0 Then frmMain.FileOpen(e.CommandLine(0))
End Sub


除了Environment.GetCommandLineArgs()之外,e.CommandLine不包含应用程序的可执行路径作为第一项。

关于vb.net - StartupNextInstance事件中的Environment.GetCommandLineArgs(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37314202/

10-10 07:35