0

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

链接到 stackoverflow 文档

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

但我真正想要的是 tftp.exe,当我查找它时它没有显示,当我在命令提示符下键入 tftp 时,它没有列出,我得到了 to recognized 命令

在运行行通过键入 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
4

2 回答 2

1

这似乎是您正在采用的一个非常令人费解的方法,但要直接回答您的问题,您可能需要像这样设置工作目录:

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

不过我不得不说,您可能需要重新考虑打开 DOS 窗口让用户键入命令的整个方法。看起来不是很用户友好。

于 2013-01-12T00:53:45.890 回答
0

好的,找到了答案,这是因为我正在运行 64 位 Windows,当它寻找 tftp.exe 时,它​​实际上是在 syswow64 目录中查找,而 tftp.exe 不在该目录中。

因为我有这个运行和编译为 x86 而不是 64 位这里是解决方法

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

然后

Wow64DisableWow64FsRedirection(0)

将 tthis 添加到我的代码后,tftp 上传工作完美

于 2013-01-12T20:41:35.143 回答