2010-12-06 9 views
1

が、私はそれは私がそれは常にアプリケーションマニフェストUACの昇格による管理者としてリターンを実行している場合を除き、素晴らしい作品シリアルGetVolumeInformation管理戻り0

[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; 
    } 

ボリュームを取得するために、このコードを使用していますマッピングされたネットワークドライブの場合は0です(それ以外の場合は動作します)

管理者ユーザーは、何らかの理由でマッピングされたドライブが表示されないことがあります。これを回避する方法はありますか、代わりにログインしたユーザーとしてコードを呼び出すだけですか?

は、私は、Windows 7 64ビット上だけど、

答えて

0

マップされたネットワークドライブは、一人のユーザのためにマッピングされたx86モードでアプリケーションを実行しています。別のユーザーとして接続すると、他のユーザーが関与する限り、ドライブは存在しません。

同じネットワークパスに複数のユーザーがアクセスする必要がある場合は、実際のUNCパス( "\\server\path")を使用します。マップされたネットワークドライブは、人間の便宜のためのものです。

マップされたネットワークドライブにアクセスするには複数のユーザーが本当に必要な場合は、ユーザーごとにマップする必要があります。たとえば、各ユーザーのログオン時に実行されるバッチファイルでこれを実行し、net useを呼び出すことができます(ただし、SYSTEMなどのユーザーには役立ちます)。

+0

私は人々がドライブをどのようにマッピングするかには影響しません。残念なことにドライブ文字を使ってシリアルにアクセスする必要があります – Homde

+0

ドライブをマッピングした同じユーザーとして実行している間に実行する必要があります(または、昇格する前にマップされたドライブの「意味」をどこかに保存するロジック) –

関連する問題