0

すべてのネットワーク ソースに対する (管理者) 権限を持つドメイン ユーザーの下で実行される Windows サービスを作成しました。

Windows サービスの開始時に、次のコードを含めました。

My.User.InitializeWithWindowsUser()

IO.DriveInfo.GetDrives を使用してすべてのドライブのコレクションを取得すると、ネットワーク ドライブ (ドライブ マッピング) ではなく、ローカル ドライブのコレクションのみが得られます。

ここで何が欠けていますか?

NB: 私は VB.NET を使用していますが、C# も理解している/知っているため、この質問にも C# をタグ付けしました。したがって、C# の例も歓迎します。

4

3 に答える 3

2

これらのドライブがどの時点でマップされるかによって異なります。たとえば、実行されていないログイン スクリプトを介してドライブ マッピングが設定されている可能性があります。

この場合は、UNC パスを介してドライブを参照するか、最初に自分でマップすることができます。次のようなことです。

http://www.blackwasp.co.uk/MapDriveLetter.aspx

于 2012-08-17T07:58:15.083 に答える
0
using System;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                DriveInfo[] drives = DriveInfo.GetDrives();
                foreach (DriveInfo di in drives)
                {
                    if (di.IsReady)
                    {
                        Console.WriteLine("Volume label: {0} ", di.VolumeLabel);
                        Console.WriteLine("Drive Type: {0} ", di.DriveType);
                        Console.WriteLine("Free space: {0} bytes ", di.TotalFreeSpace);
                        Console.WriteLine("Drive Size: {0} bytes \n", di.TotalSize);
                    }
                }
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                // handle ex
            }
        }
    }
}

これを試したところ、ネットワークを含むすべてのドライブが取得されます。それが役に立てば幸い。

于 2012-08-17T07:58:01.283 に答える
0

これは誤解によるものです。MSDNに記載されているように、My.User.InitializeWithWindowsUser()現在のスレッドのプリンシパルのみを設定します。あなたのスレッドはユーザーになりすますだけです。ネットワーク マッピングが保存されているユーザー セッションには接続しません。

ユーザーのマップされたドライブにアクセスするには、現在ログオンしているユーザーのデスクトップ セッションにアクセスする必要があります。これは、ユーザーがログオンしていない可能性があるため意味がありません。

冗談を言うために、ユーザーが起動したときにログオンしたユーザーのWindowsセッションで実行可能ファイルにまたがるWindowsサービスを作成し、Outlookに接続して、会社全体に「ねえ、みんなのデザート、私のおやつ!」というメールを送信しました。

これはあなたが探しているものです。

于 2012-08-17T08:13:44.517 に答える