C# 通过共享路径获取HDD串行数据

C# 通过共享路径获取HDD串行数据,c#,kernel32,shared-directory,C#,Kernel32,Shared Directory,我有一个C#win表单应用程序。在其中,我得到了一个独特的系列硬盘驱动器使用这种方法 [DllImport("kernel32.dll", CharSet = CharSet.Auto)] public static extern bool GetVolumeInformation(string Volume, StringBuilder VolumeName, uint VolumeNameSize, out uint SerialNumber, uin

我有一个C#win表单应用程序。在其中,我得到了一个独特的系列硬盘驱动器使用这种方法

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
        public static extern bool GetVolumeInformation(string Volume, StringBuilder VolumeName,
            uint VolumeNameSize, out uint SerialNumber, uint SerialNumberLength,
            uint flags, StringBuilder fs, uint fs_size);
卷变量为
Path.GetPathRoot(Environment.CurrentDirectory)

我得到的序列号是
SerialNumber.ToString(“X”)

工作很好,但情况很糟糕

  • 我已共享应用程序文件夹。当我运行
    EXE
  • 当另一个人从我的共享路径运行应用程序时,他会以串行方式获得
    00000000
  • 但是当另一个用户映射了这个文件夹并运行应用程序时,他会得到
    XXXXXXXX
  • 那么这个问题的原因是什么呢?有没有更好的使用方法


    我提到了,但不符合我的需要。

    只是猜测,但我假设如果您使用UNC路径作为卷(类似“\\Server\Share\app.exe”),则这不起作用,因为共享实际上不是一个具有序列号的卷。如果映射它,它将成为驱动器号并获取序列号。本地运行时的序列号与使用映射路径运行时的序列号相同吗?@PMF是的,它是相同的..这让我有点吃惊,因为这意味着它不需要是唯一的。如果您在同一台计算机的不同共享中有多个映射,则会得到重复的序列。@PMF I将两个映射驱动器添加到同一文件夹。两人都给出了相同的序列号……好吧,这证实了我的假设。实际上,卷序列号不一定是唯一的。这可能是一个问题,也可能不是问题,这取决于您试图做什么。