我想以编程方式确定我的应用程序是否从网络驱动器运行。最简单的方法是什么?它应该支持 UNC 路径 ( \\127.0.0.1\d$
) 和映射的网络驱动器 (Z:)。
问问题
3165 次
6 回答
23
这适用于映射驱动器案例。您可以使用DriveInfo
该类来确定驱动器 a 是否为网络驱动器。
DriveInfo info = new DriveInfo("Z");
if (info.DriveType == DriveType.Network)
{
// Running from network
}
完整的方法和示例代码。
public static bool IsRunningFromNetwork(string rootPath)
{
try
{
System.IO.DriveInfo info = new DriveInfo(rootPath);
if (info.DriveType == DriveType.Network)
{
return true;
}
return false;
}
catch
{
try
{
Uri uri = new Uri(rootPath);
return uri.IsUnc;
}
catch
{
return false;
}
}
}
static void Main(string[] args)
{
Console.WriteLine(IsRunningFromNetwork(System.IO.Path.GetPathRoot(AppDomain.CurrentDomain.BaseDirectory))); }
于 2011-12-26T07:11:59.490 回答
4
if (new DriveInfo(Application.StartupPath).DriveType == DriveType.Network)
{
// here
}
于 2011-12-26T07:17:49.150 回答
2
这是我目前这样做的方法,但感觉应该有更好的方法。
private bool IsRunningFromNetworkDrive()
{
var dir = AppDomain.CurrentDomain.BaseDirectory;
var driveLetter = dir.First();
if (!Char.IsLetter(driveLetter))
return true;
if (new DriveInfo(driveLetter.ToString()).DriveType == DriveType.Network)
return true;
return false;
}
于 2011-12-26T07:17:36.610 回答
1
如果使用 UNC 路径,这非常简单 - 检查 UNC 中的主机名并测试它是否为 localhost(127.0.0.1,::1,主机名,主机名.domain.local,工作站的 IP 地址)。
如果路径不是 UNC - 从路径中提取驱动器号并测试 DriveInfo 类的类型
于 2011-12-26T07:16:12.553 回答
1
我重新安排了dotnetstep的解决方案,我认为这更好,因为它在传递有效路径时避免了异常,并且如果传递了错误的路径,它会抛出异常,这不允许假设真假。
//----------------------------------------------------------------------------------------------------
/// <summary>Gets a boolean indicating whether the specified path is a local path or a network path.</summary>
/// <param name="path">Path to check</param>
/// <returns>Returns a boolean indicating whether the specified path is a local path or a network path.</returns>
public static Boolean IsNetworkPath(String path) {
Uri uri = new Uri(path);
if (uri.IsUnc) {
return true;
}
DriveInfo info = new DriveInfo(path);
if (info.DriveType == DriveType.Network) {
return true;
}
return false;
}
测试:
//----------------------------------------------------------------------------------------------------
/// <summary>A test for IsNetworkPath</summary>
[TestMethod()]
public void IsNetworkPathTest() {
String s1 = @"\\Test"; // unc
String s2 = @"C:\Program Files"; // local
String s3 = @"S:\"; // mapped
String s4 = "ljöasdf"; // invalid
Assert.IsTrue(RPath.IsNetworkPath(s1));
Assert.IsFalse(RPath.IsNetworkPath(s2));
Assert.IsTrue(RPath.IsNetworkPath(s3));
try {
RPath.IsNetworkPath(s4);
Assert.Fail();
}
catch {}
}
于 2016-10-21T06:50:24.200 回答
0
DriveInfo m = DriveInfo.GetDrives().Where(p => p.DriveType == DriveType.Network).FirstOrDefault();
if (m != null)
{
//do stuff
}
else
{
//do stuff
}
于 2011-12-26T07:35:09.217 回答