以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请问shell函数和Process在建立共享连接时的区别  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=102470)

--  作者:九易六
--  发布时间:2017/6/20 14:09:00
--  请问shell函数和Process在建立共享连接时的区别
我看到论坛上大家关于局域网建立共享连接的问题,有如下几种代码编写方式:

第一种:
shell("net use \\\\192.168.44.202\\e TBFCfs.2109 /user:Administrator",0)

第二种:
Shell("cmd.exe /c /q net use \\\\192.168.44.202\\e TBFCfs.2109 /user:Administrator")

第三种:
Dim p As new Process()
p.StartInfo.FileName = "cmd.exe"
p.StartInfo.UseShellExecute = False \'关闭Shell的使用
p.StartInfo.RedirectStandardInput = True \'重定向标准输入
p.StartInfo.RedirectStandardOutput = True \'重定向标准输出
p.StartInfo.RedirectStandardError = True \'重定向错误输出
p.StartInfo.CreateNoWindow = True \'设置不显示窗口
p.Start()
p.StandardInput.WriteLine( "net use  \\\\192.168.44.202\\ TBFCfs.2109 /user:Administrator")
p.StandardInput.WriteLine("exit")

请问这几种编写方式有什么优缺点?
我想用来建立一个到局域网升级文件夹的共享连接。Foxtable当中,是不是要等这个命令执行完毕之后,才会顺序执行后面的Syscmd.Project.Update命令?
因为我发布之后的项目,有的客户端可以正常升级,有的客户端会提示异常,不知道是不是这个语句编写的问题。

--  作者:有点色
--  发布时间:2017/6/20 14:52:00
--  

第一、第二种,是一样的意思,不论是否执行完成,后面的代码都会马上执行。

 

第三种,控制比较灵活一些,而且可以等候命令执行完成,才继续执行后面的代码,比较靠谱。


--  作者:九易六
--  发布时间:2017/6/20 15:33:00
--  
Dim p As new Process()
p.StartInfo.FileName = "cmd.exe"
p.StartInfo.UseShellExecute = False \'关闭Shell的使用
p.StartInfo.RedirectStandardInput = True \'重定向标准输入
p.StartInfo.RedirectStandardOutput = True \'重定向标准输出
p.StartInfo.RedirectStandardError = True \'重定向错误输出
p.StartInfo.CreateNoWindow = True \'设置不显示窗口
p.Start()
p.StandardInput.WriteLine( "net use  \\\\192.168.44.202\\ TBFCfs.2109 /user:Administrator")
p.StandardInput.WriteLine("exit")

现在这种写法,就是等待执行完成之后,再执行后续代码的吗?

--  作者:有点色
--  发布时间:2017/6/20 15:35:00
--  
 是的,执行完成后,再执行你后面的代码。
--  作者:九易六
--  发布时间:2017/6/21 10:04:00
--  
再进一步请问,我想捕获错误,就是当共享连接无法建立的时候,能执行我指定的代码,怎么捕获呢?
我将  p.StartInfo.RedirectStandardError = True \'重定向错误输出  这一句注释掉,也无法捕获错误。应当怎么做才可以呢?

--  作者:有点色
--  发布时间:2017/6/21 10:09:00
--  

 方法一:你可以弹出执行结果,根据弹出内容,决定执行什么。最后写

 

Dim strRst As String = p.StandardOutput.ReadToEnd()
msgbox(strrst)

 

 方法二:你可以在执行完毕以后,尝试访问你共享文件夹的文件,看行不行 http://www.foxtable.com/webhelp/scr/0331.htm