更新:我相信我找到了最简单,最一致的方法,方法2和3可能会或可能不会始终如一地发现。

方法1 - 调用网络使用(一致地工作和跨域)

Net Use Command允许您通过命令提示符将凭据存储到共享,并且您可以非常轻松地从.NET调用它。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Dim proc As New Process

proc.StartInfo.FileName = "net"

proc.StartInfo.UseShellExecute = True

proc.EnableRaisingEvents = False

Dim server As String = "Server"

Dim user As String = "User"

Dim pass As String = "Pass"

If EnsureConnection(server) Then

proc.StartInfo.Arguments = "use \\" & server & "\IPC$ /u:" & server & "\" & user & " " & pass

proc.Start()

End If

End Sub

Function EnsureConnection(server As String)

'Give more or less ping attempts depending on how reliable your connection is.

'I have found that one ping can give false negative easily even on reliable connections

If My.Computer.Network.Ping(server) Then

Return True

ElseIf My.Computer.Network.Ping(server) Then

Return True

Else

Return False

End If

End Function

此方法将凭证存储在计算机上,直到计算机关闭或重新启动,并且用户也将在程序外部进行身份验证。 如果不希望这样,你可以随时使用命令的'/ delete'开关在程序完成后立即将其删除。

方法2 - 使用MPR.DLL中的函数

我最终找到了另一个问题的答案 。 这是对我有用的方法。 这就是它集成到我的项目中的样子:

Imports System.IO

Imports System.Runtime.InteropServices

Public Class Form1

Dim user As String

Dim pass As String

Dim path As String

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

Cursor = Cursors.WaitCursor

user = "UsernameString"

pass = "PasswordString"

path = "\\10.0.15.87\c$"

MPRAuth()

DirSearch(path)

Cursor = Cursors.Default

End Sub

Private Sub MPRAuth()

Dim nr As New NETRESOURCE

nr.dwType = RESOURCETYPE_DISK

nr.lpRemoteName = path

If WNetAddConnection2(nr, pass, user, 0) <> NO_ERROR Then

Throw New Exception("WNetAddConnection2 failed.")

End If

If WNetCancelConnection2(path, 0, True) <> NO_ERROR Then

Throw New Exception("WNetCancelConnection2 failed.")

End If

End Sub

Public Sub DirSearch(ByVal sDir As String)

Try

For Each dir As String In Directory.GetDirectories(sDir)

Try

For Each file In Directory.GetFiles(dir, "*.exe")

MsgBox(file)

Next

Catch ex As Exception

Debug.WriteLine(ex.Message)

End Try

DirSearch(dir)

Next

Catch ex As Exception

Debug.WriteLine(ex.Message)

End Try

End Sub

Private Structure NETRESOURCE

Public dwScope As UInteger

Public dwType As UInteger

Public dwDisplayType As UInteger

Public dwUsage As UInteger

Public lpLocalName As String

Public lpRemoteName As String

Public lpComment As String

Public lpProvider As String

End Structure

Private Const NO_ERROR As UInteger = 0

Private Const RESOURCETYPE_DISK As UInteger = 1

Private Shared Function WNetAddConnection2(ByRef lpNetResource As NETRESOURCE, ByVal lpPassword As String, ByVal lpUserName As String, ByVal dwFlags As UInteger) As UInteger

End Function

Private Shared Function WNetCancelConnection2( ByVal lpName As String, ByVal dwFlags As UInteger, ByVal fForce As Boolean) As UInteger

End Function

End Class

方法3 - NetworkCredential和CredentialCache

此方法将ip转换为URI并缓存凭据。 我无法使这个方法适用于与我不同的域上的服务器。

Imports System.Net

Dim builder As New UriBuilder("10.0.15.87")

Dim uri As Uri = builder.Uri

Dim netCred = New NetworkCredential("UsernameString", "PasswordString", "DomainString")

Dim netCache = New CredentialCache()

netCache.Add(uri, "Basic", netCred)

DirSearch("\\10.0.15.87\c$")

方法2与方法2的关系要少得多,只要我尝试连接的服务器与我在同一个域中,它就可以正常工作。 当我尝试连接到不在域上的服务器时,我收到错误“用户名或密码不正确”,这是不正确的,所以我不确定问题出在哪里 - 也许其他人都知道。 到目前为止,对于任何服务器而言,无论是域还是在运行代码之前已经手动对其进行了身份验证,方法2对我来说都是完美无缺的。 希望这有助于他人!

vb.net同步服务器文件,vb.net - VB.NET - 如何以编程方式将身份验证传递给服务器 - 如何访问需要身份验证的服务器上的文件 - 堆栈内存溢出...相关推荐

  1. pdf 中的java运行,java - 从pdf文件读取特定位置的itext在intellij中运行,并提供所需的输出,但是可执行jar抛出错误 - 堆栈内存溢出...

    我正在从n个页面的输入pdf文件中读取特定位置,并在这些位置上列出文本. 然后,我编写一个新的pdf文档,并将列表中的这些字符串写入包含单元格的表中. 我提出了两个主要问题. 我想在表中有三列,但是如 ...

  2. android 电视安装apk文件损坏,android - 无法在Android电视盒上安装APK - 堆栈内存溢出...

    我正在为Android TV编写应用程序. 它可以在模拟器上正常运行,并在Android电视盒上以调试模式运行. 但是,当我使用Android Studio生成apk并尝试将该apk安装在同一盒子上时 ...

  3. ios 从服务器获取文件,ios - 如何将远程文件(从远程SMB服务器获取)提供给某些请求 - 堆栈内存溢出...

    当某些请求命中服务器(在移动应用程序上运行的服务器)时,我正在尝试将视频文件作为响应提供. 该视频文件可以存储在本地,也可以是外部存储的. 我开始尝试提供位于SMB服务器上的文件,所以我尝试使用此代码 ...

  4. Beyond Compare 4访问手机或媒体播放器上的文件

    Beyond Compare 4 for Windows 可以使用媒体传输协议 (MTP) 访问 Apple iPhone.Android 手机和平板电脑.Windows Phone 设备和某些媒体播 ...

  5. 如何为linux 桌面文件内存,linux - 桌面Linux发行版中.desktop文件的功能是什么? - 堆栈内存溢出...

    我有以下情况:我必须修改一个.desktop文件,该文件位于我正在使用的应用程序的包中. 当我尝试打开文件的内容时,我遇到了一个奇怪的问题. 如果我点击它然后我尝试点击"打开"它给 ...

  6. java spark 读取json_apache-spark - 与aws-java-sdk链接时,在读取json文件时发生Spark崩溃 - 堆栈内存溢出...

    让config.json成为一个小的json文件: { "toto": 1 } 我做了一个简单的代码,用sc.textFile读取json文件(因为文件可以在S3,本地或HDFS上 ...

  7. linux包含绝对路径头文件,linux-kernel - 访问用户空间内存访问函数(如access_ok(),get_from_user())需要包含的头文件的确切路径。 - 堆栈内存溢出...

    我在linux-headers-3.2.0-49中搜索了用户内存访问功能. 它在uaccess.h头文件中定义,但是uaccess.h文件太多. 下面是我在linux-headers-3.2.0-49 ...

  8. linux群晖文件路径,如何访问本地网络中 Synology NAS 上的文件 (NFS)

    总览 Synology NAS 经过专门设计,可快速简单地在本地网络中存储和共享文件,让您直接访问 Synology NAS 上的文件而避免每次登录 DSM 的麻烦.您能够使用 NFS 访问 Syno ...

  9. java创建一个大文件,java - 用Java创建包含大文件的目录 - 堆栈内存溢出

    他们谈论将zip文件视为文件系统,并通过这种方式提供了递归压缩文件和文件夹的密钥,如您在链接中提到的示例中所看到的,将被视为文件系统,可以使用java.nio进行访问(甚至我都不知道!). 此外,您可 ...

  10. java堆栈信息 linux_java - Java程序无法从Linux服务器远程读取文件 - 堆栈内存溢出...

    我想从Linux服务器上通过Java程序远程访问文件.我已经编写了此代码,但无法正常工作. public static void main(String arg[]) throws FileNotFo ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装CHM阅读器KchmViewer 5.3
  2. 2015 年最受 Linux 爱好者欢迎的软硬件大盘点
  3. sudo及其配置文件sudoers
  4. POJ3070 矩阵快速幂模板
  5. 数据挖掘算法学习(四)PCA算法
  6. 这就是你们有钱人炫富的新方式吗?
  7. python建db文件_临时数据库之python用sqlite3模块操作sqlite
  8. WebStorm 打开Node.js的代码提示功能
  9. JAVA中遗留的问题_java中遗留的小问题
  10. L298N 驱动模块的应用
  11. C++ 在程序中设置环境变量
  12. matlab根号二,matlab根号二怎么打_常见问题解析,matlab,根号二,根号
  13. 从微软中国下载Windows系统并安装
  14. DNA测序技术的发展史之——第二代测序技术
  15. 丘成桐:数理与人文(官方完整版PDF下载)(公号回复“丘成桐数学”下载PDF典型资料,欢迎转发、赞赏支持科普)
  16. 为何需要物联网设备管理平台
  17. JS:二叉树(2)——递归操作节点、构造二叉树
  18. Win10命令大全通用
  19. Nginx配置详解/代理服务的配置说明
  20. 七天治愈拖延症-读后感

热门文章

  1. 微信小程序跳转微信小程序的实现
  2. vue学习笔记-接口调用-axios
  3. cvt公链采用什么结构_好马配好鞍,迈锐宝上全新的CVT变速箱,是什么来头?
  4. 计算机右键管理提示没有关联应用,我的电脑--右键--管理,提示与应用程序无关联...
  5. wpf listview透明但字不要透明_透明胶带放水里泡一泡,真是厉害,解决了很多家庭一大烦恼,实用...
  6. java 子线程传参_java开启新线程并传参的两种方法
  7. java中访问权限控制顺序_Java中的四种访问权限控制 | 学步园
  8. 03_安装和配置 kubectl
  9. bound、frame、position、anchorPoint
  10. 爬虫(二)-创建项目应用