我在我工作的地方维护一个驱动器映射工具。它的唯一真正目的是映射网络驱动器。它已经存在了一段时间,随着操作系统的升级,这些年来一直在更新。映射驱动器的代码是:
Process prMapDrive;
prMapDrive = new Process();
prMapDrive.StartInfo.UseShellExecute = true;
prMapDrive.StartInfo.FileName = "cmd.exe";
prMapDrive.StartInfo.Arguments = string.Format(@"/C net use {0} {1} /persistent:{2}", sDrive, sPath, fPersist ? "Yes" : "No");
prMapDrive.StartInfo.CreateNoWindow = true;
prMapDrive.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
prMapDrive.Start();
prMapDrive.WaitForExit();
prMapDrive.Close();
prMapDrive.StartInfo.Verb = "runas";
prMapDrive.Start();
prMapDrive.WaitForExit();
prMapDrive.Close();
此代码在Windows 7计算机上运行良好,我没有任何抱怨。当人们在Windows 10上使用它时,投诉就会出现。在Windows 10上运行时,驱动器不可见。我添加了以下代码行,以检查是否存在驱动器:
return Directory.Exists(sDrive);
这返回True,但当我进入探险家时,我看不到驱动器。如果我转到dos提示并使用net use
检查驱动器,我就看不到了。因此,尽管Directory.Exists返回True,我也看不到任何映射驱动器。这似乎没有失败,我认为在某种程度上,它不是。否则Directory.Exists不会返回True。
更糟糕的是,这是旧版VB.NET实用程序的较新版本。这个实用程序起作用,至少对我而言,尽管有些人抱怨说它不起作用。它的VB.NET代码是:
Dim prMapDrive As Process
prMapDrive.StartInfo.UseShellExecute = True
prMapDrive.StartInfo.FileName = "cmd.exe"
prMapDrive.StartInfo.Arguments = String.Format("/C net use {0} {1} /persistent:{2}", sDrive, sPath, _
If(fPersist, "Yes", "No"))
prMapDrive.StartInfo.CreateNoWindow = True
prMapDrive.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
prMapDrive.Start()
prMapDrive.WaitForExit()
prMapDrive.Close()
prMapDrive.StartInfo.Verb = "runas"
prMapDrive.Start()
prMapDrive.WaitForExit()
prMapDrive.Close()
Return Directory.Exists(sDrive)
除了他们使用不同的编程语言这一事实外,我没有看到这两者之间有任何区别。
查看Windows 7中的注册表,我看到在HKCU \ Network下映射的驱动器。当我查看Windows 10计算机时,我看不到映射的驱动器。这就是一个区别。
另一个区别 - 如果我使用提升的命令提示符,那么我可以看到使用net use的驱动器,我可以通过DOS访问它们。
因此看起来驱动器正在被映射,并且可以从提升的命令提示符访问。
我错过了什么?还有其他方法我应该处理这个吗?我曾经使用WNetAddConnection,但在Windows 10上停止使用它,因为它似乎没有用。