admin返回0时,网络驱动器的GetVolumeInformation

时间:2010-12-06 07:47:06

标签: c# windows winapi

我正在使用此代码检索卷序列

    [DllImport("Kernel32.dll", SetLastError = true)]
    extern static bool GetVolumeInformation(string vol, StringBuilder name, int nameSize, out uint serialNum, out uint maxNameLen, out uint flags, StringBuilder fileSysName, int fileSysNameSize);


    public static uint GetVolumeSerial(string strDriveLetter)
    {
        uint serialNum, maxNameLen, flags;
        bool ok = GetVolumeInformation(strDriveLetter, null, 0, out serialNum,out maxNameLen, out flags, null, 0);
        return serialNum;
    }

它工作得很好,除非我通过应用程序清单UAC提升作为管理员运行它总是为映射的网络驱动器返回0(但它会起作用)

也许管理员用户由于某种原因没有看到映射的驱动器(你认为这是另一种方式)。有没有办法解决这个问题,或者只是像登录用户那样调用该代码?

我使用的是64位Windows 7,但是在x86模式下运行应用程序

1 个答案:

答案 0 :(得分:0)

为一个用户映射映射的网络驱动器。当您作为其他用户进行连接时,就其他用户而言,该驱动器不存在。

如果您需要多个用户访问同一网络路径,请使用实际的UNC路径(“\\server\path”)。映射的网络驱动器只是人类的便利。

如果您确实需要多个用户来访问映射的网络驱动器,则需要分别为每个用户映射它。例如,你可以在一个批处理文件中执行此操作,该文件在每个用户的登录时运行并调用net use(我不太确定它会对像SYSTEM这样的用户有帮助。)