如何用Visual Basic编写EXE保存Net Use用户数据访问非域电脑?
问题分析与解决方案
核心问题排查
- 路径格式错误:Net Use命令的网络资源路径必须以双反斜杠
\\开头,原代码中使用单个\(如\PCA),系统无法识别有效网络路径,直接触发System error 53。 - 窗口一闪而过:使用
/c参数会让CMD执行命令后立即关闭,无法查看执行结果或错误信息。 - 特殊字符解析问题:密码中的
$是CMD环境变量标识,直接写入会被错误解析,导致密码不匹配。
修正后的代码示例
方案1:保留CMD窗口查看执行结果
Module Program Sub Main(args As String()) ' 合并命令并保留CMD窗口,添加pause避免窗口自动关闭 Dim cmdArgs As String = "/k " & _ "net use \\PCA /user:PCA\USER1 ""Pa$$word"" /PERSISTENT:yes & " & _ "net use \\PCB /user:PCB\USER1 ""Pa$$word"" /PERSISTENT:yes & " & _ "net use \\PCC /user:PCC\USER1 ""Pa$$word"" /PERSISTENT:yes & pause" Process.Start("CMD.exe", cmdArgs) End Sub End Module
方案2:捕获输出并显示(更适合调试)
Imports System.Diagnostics Module Program Sub Main(args As String()) Dim targetComputers As String() = {"PCA", "PCB", "PCC"} Dim localUsername As String = "USER1" Dim localPassword As String = "Pa$$word" For Each compName In targetComputers Dim psi As New ProcessStartInfo("CMD.exe") With { .Arguments = $"/c net use \\{compName} /user:{compName}\{localUsername} ""{localPassword}"" /PERSISTENT:yes", .RedirectStandardOutput = True, .RedirectStandardError = True, .UseShellExecute = False, .CreateNoWindow = False ' 设为True可隐藏CMD窗口 } Using proc As Process = Process.Start(psi) proc.WaitForExit() Dim output As String = proc.StandardOutput.ReadToEnd() Dim errorMsg As String = proc.StandardError.ReadToEnd() Console.WriteLine($"=== 处理 {compName} ===") If Not String.IsNullOrWhiteSpace(output) Then Console.WriteLine("输出:" & output) End If If Not String.IsNullOrWhiteSpace(errorMsg) Then Console.WriteLine("错误:" & errorMsg) End If End Using Next Console.WriteLine(vbCrLf & "操作完成,按任意键退出...") Console.ReadKey() End Sub End Module
额外注意事项
- 网络连通性验证:先在PC1上手动执行
ping PCA,确认目标电脑可达;再手动执行net use \\PCA /user:PCA\USER1 Pa$$word,排除网络或权限问题。 - 目标电脑设置:确保PCA/PCB/PCC开启了SMB服务,USER1账户启用了网络访问权限,且共享文件夹已配置正确的读写权限。
- 密码转义:若密码包含更多特殊字符(如
&、|),需用双引号包裹或使用CMD转义符^处理。
内容的提问来源于stack exchange,提问作者mftt3c
相关产品推荐
相关产品推荐

