1

我有一个可以读取某些类型文件的应用程序,并且它可以正常工作,因此如果您从 Windows 中“打开”,它会自动启动应用程序并打开所选文件。

不幸的是,我不能让它为多个文件工作。

System.Environment.GetCommandLineArgs() 包含以下内容: System.Environment.GetCommandLineArgs(0) = .exe 的名称和路径 System.Environment.GetCommandLineArgs(1) = 选择要打开的第一个文件的名称和路径

System.Environment.GetCommandLineArgs().Length 在用户尝试打开 1 个文件时为 2,这是有道理的,因为第一个参数是 .exe 本身,第二个是文件的路径,但如果它不会增加到 3用户尝试打开 2 个文件......这意味着 System.Environment.GetCommandLineArgs(2) 永远不会被填充

这是一些显示问题的示例代码:它将识别没有文件或打开一个文件,但如果您尝试打开多个它只会显示第一个。

    Private Sub Form_Main_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Me.Show()

    ' Check if the user is opening a file upon startup
    If System.Environment.GetCommandLineArgs().Length > 1 Then
        Dim i As Integer


        'this outputs the exe path and the the first file, if it exists, but never the 2nd file...
        'For i = 0 To System.Environment.GetCommandLineArgs().Length - 1
        '    MsgBox(System.Environment.GetCommandLineArgs(i))
        'Next

        'this outputs the first file, if it exists, but never the 2nd file...
        For i = 1 To System.Environment.GetCommandLineArgs().Length - 1
            MsgBox(System.Environment.GetCommandLineArgs(i))
        Next


    End If

End Sub

有什么我想念的吗?是否有使用 System.Environment.GetCommandLineArgs() 的替代方法

另外,我注意到如果我在 .exe 的快捷方式中指定它们,我确实可以有多个命令参数,例如,设置目标:

"C:\Program Files\Reader\Reader.exe" -today -tommorow

当我以这种方式运行它时,我得到:

System.Environment.GetCommandLineArgs().Length = 3
System.Environment.GetCommandLineArgs(0) = "C:\Program Files\Reader\Reader.exe"
System.Environment.GetCommandLineArgs(1) = "-today"
System.Environment.GetCommandLineArgs(2) = "-tomorrow"

这是我所期望的......

如果有帮助,我正在使用 Windows XP

4

1 回答 1

1

据我所知,当您在资源管理器中选择多个文件时,Windows 不会在同一命令行上发送多个文件名。对于某些应用程序,它将作为程序的单独实例启动,并将每个实例传递一个文件。

于 2012-05-15T18:12:26.203 回答