dos cmd\cmd提示符vb.net 2010

dos cmd\cmd提示符vb.net 2010,vb.net,Vb.net,我使用此示例从vb.net 2010中打开命令提示符 命令提示符按预期打开,我可以执行目录打开命令,如regedit等,没有问题 但我真正想要的是tftp.exe,当我查找它时,它不会显示,当执行dir时,当在命令提示符下键入tftp时,它不会列出,我得到了to recogned命令 当在运行行通过键入cmd与普通命令提示符进行比较时,我可以在windows\system32文件夹中看到它 另外,当我在普通命令提示符下执行dir,并与vb.net打开的cmd提示符下的dir进行比较时,在接近3

我使用此示例从vb.net 2010中打开命令提示符

命令提示符按预期打开,我可以执行目录打开命令,如regedit等,没有问题

但我真正想要的是tftp.exe,当我查找它时,它不会显示,当执行dir时,当在命令提示符下键入tftp时,它不会列出,我得到了to recogned命令

当在运行行通过键入cmd与普通命令提示符进行比较时,我可以在windows\system32文件夹中看到它

另外,当我在普通命令提示符下执行dir,并与vb.net打开的cmd提示符下的dir进行比较时,在接近3000个文件中,有400多个文件存在差异

试图找出为什么我看不到这里的所有文件是我使用的实际代码

Private Sub Button30_Click(sender As System.Object, e As System.EventArgs) Handles Button30.Click
        Dim command As String = "tftp -i 192.168.10.177 put test1.bin"
        Dim arguments As String = ""
        Dim permanent As Boolean = True
        Dim p As Process = New Process()
        Dim pi As ProcessStartInfo = New ProcessStartInfo()
        pi.Arguments = " " + If(permanent = True, "/K", "/C") + " " + command + " " + arguments
        pi.FileName = "cmd.exe"
        p.StartInfo = pi
        p.Start()
    End Sub

这似乎是一种非常复杂的方法,但要直接回答您的问题,您可能需要如下设置工作目录:

pi.WorkingDirectory = "c:\windows\system32"

我不得不说,您可能需要重新考虑打开DOS窗口供用户键入命令的整个方法。没有看到非常友好的用户界面。

确定找到了答案,因为我正在运行64位windows,当它查找tftp.exe时,它实际上在syswow64目录中查找,而tftp.exe不在该目录中

因为我已经为x86而不是64位运行和编译了它,所以这里是解决方法

Public Declare Function Wow64DisableWow64FsRedirection Lib "kernel32" (ByRef oldvalue As Long) As Boolean
然后


将此添加到我的代码中后,tftp上传功能完美无瑕

您到底想用它实现什么。为什么不让你的代码直接调用tftp.exe呢?如果你看一下它调用tftp-i 192.168.10.177 put test1.bin的代码,它没有看到它,我得到的命令没有找到,所以我尝试手动执行,它也找不到。除非有其他方法,否则我应该尝试调用它。您不需要使用cmd.exe,直接运行tftp命令即可。您的方法非常复杂且不必要。我将其向前推进了一步,或者对代码进行了详细说明,将oprocess设置为process,然后在下一行oprocess.start(“notepad.exe”)和notepad打开,但如果我将notepad.exe更改为tftp.exe,则会出现“文件未找到”错误。而且两个文件都在同一个目录中。如果我将第2行的命令更改为运行ie xcopy的目录中的其他命令,我不希望该框在工作时保持打开状态。再次只保留cmd提示符打开,直到我找到为什么它看不到tftp.exe文件我尝试添加工作目录相同的结果。最糟糕的是,如果我使用dir-tftp***,什么也找不到,但是如果我使用dir-tftp***,从一个普通的cmd提示符,它就在那里,我进一步使用了一步,或是对代码进行了修改,将oprocess作为process,下一行oprocess.start(“notepad.exe”)和notepad打开,但是如果我将notepad.exe更改为tftp.exe,我会得到一个files notefound错误。两个文件都在同一个目录中
Wow64DisableWow64FsRedirection(0)