Foxtable(狐表)用户栏目专家坐堂 → 请问shell函数和Process在建立共享连接时的区别


  共有2007人关注过本帖树形打印复制链接

主题:请问shell函数和Process在建立共享连接时的区别

帅哥哟,离线,有人找我吗?
九易六
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:184 积分:1800 威望:0 精华:1 注册:2009/3/16 14:05:00
请问shell函数和Process在建立共享连接时的区别  发帖心情 Post By:2017/6/20 14:09:00 [只看该作者]

我看到论坛上大家关于局域网建立共享连接的问题,有如下几种代码编写方式:

第一种:
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命令?
因为我发布之后的项目,有的客户端可以正常升级,有的客户端会提示异常,不知道是不是这个语句编写的问题。

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/20 14:52:00 [只看该作者]

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

 

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


 回到顶部
帅哥哟,离线,有人找我吗?
九易六
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:184 积分:1800 威望:0 精华:1 注册:2009/3/16 14:05:00
  发帖心情 Post By: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")

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

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/20 15:35:00 [只看该作者]

 是的,执行完成后,再执行你后面的代码。

 回到顶部
帅哥哟,离线,有人找我吗?
九易六
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:184 积分:1800 威望:0 精华:1 注册:2009/3/16 14:05:00
  发帖心情 Post By:2017/6/21 10:04:00 [只看该作者]

再进一步请问,我想捕获错误,就是当共享连接无法建立的时候,能执行我指定的代码,怎么捕获呢?
我将  p.StartInfo.RedirectStandardError = True '重定向错误输出  这一句注释掉,也无法捕获错误。应当怎么做才可以呢?

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/6/21 10:09:00 [只看该作者]

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

 

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

 

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

 


 回到顶部