C# WNetAddConnection2失败,但网络使用成功
我正在尝试使用WNetAddConnection2连接到网络资源,但失败,错误代码为error\u BAD\u NET\u NAME(错误代码67) 但是,如果使用具有相同用户名和密码的“netuse”命令,则会成功 有什么线索吗C# WNetAddConnection2失败,但网络使用成功,c#,network-programming,C#,Network Programming,我正在尝试使用WNetAddConnection2连接到网络资源,但失败,错误代码为error\u BAD\u NET\u NAME(错误代码67) 但是,如果使用具有相同用户名和密码的“netuse”命令,则会成功 有什么线索吗 public class NETRESOURCE { public int dwScope; public int dwType; public int dwDisplayType; public
public class NETRESOURCE
{
public int dwScope;
public int dwType;
public int dwDisplayType;
public int dwUsage;
public string LocalName;
public string RemoteName;
public string Comment;
public string Provider;
}
[DllImport("mpr.dll")]
public static extern int WNetAddConnection2(NETRESOURCE netResource, string password, string username, int flags);
public class ServerConnect
{
private string serverName;
private string userName;
private string password;
public int nResult;
public ServerConnect()
{
serverName = "";
userName = "";
password = "";
nResult = -1;
}
public void SetConnectionParam(string serName, string uName, string pwd)
{
serverName = serName;
userName = uName;
password = pwd;
}
public void Connect()
{
NETRESOURCE myResource = new NETRESOURCE();
myResource.dwScope = 0;
myResource.dwType = 0x00000001; //RESOURCETYPE_DISK
myResource.dwDisplayType = 0;
myResource.LocalName = "";
myResource.RemoteName = serverName;
myResource.dwUsage = 0;
myResource.Comment = "";
myResource.Provider = "";
nResult = WNetAddConnection2(myResource, password, userName, 0);
}
};
public void ConnectToDataServer(string serverName)
{
ServerConnect oConnect = new ServerConnect();
oConnect.SetConnectionParam(serverName, @"Domain\username", @"password");
Thread connectionThread = new Thread(new ThreadStart(oConnect.Connect));
connectionThread.Start();
while (!connectionThread.IsAlive) ;// Wait till thread starts and Alive
int nCount = 0;
while (connectionThread.IsAlive)
{
Thread.Sleep(500);
nCount++;
if (nCount == 10) // wait for 5 secs
{
//WriteLine(this, "Failed to Connect to to server " + serverName , LogStatus.Error);
connectionThread.Abort();
Thread.Sleep(1000);
}
}
//WriteLine(this, oConnect.nResult.ToString(), LogStatus.Success);
}
public void ConnectToServer()
{
ConnectToDataServer(@"\\ServerName");
}
首先,我们需要查看您的代码,因为
wnetadconnection2
是一个Windows函数,因此p/Invoked和p/Invoke操作总是非常复杂的
请注意,假设您已正确调用,则可能存在权限(如果您运行的是Windows 8,则尤其如此)。尝试确保在登录VS时以管理员身份运行,因为这通常会将相同的凭据扩展到正在执行的应用程序,而控制台通常具有不同的权限。感谢您的响应。我用代码编辑了我的帖子。我在一个线程中运行WNetAddConnection2,以确保在需要永远的时间时可以中止它。我正在以管理员权限运行此应用程序。我在管理命令windowERROR\u BAD\u net\u NAME上发出了“net use”,它与用户名/密码无关,而是在找不到计算机/服务器的网络名时抛出。我理解这一点。但是net use似乎找到了该名称并成功运行。好的,很抱歉。我不确定,因为你的问题暗示你关注的是用户名/密码,而不是计算机名。