0

我创建了一个 Windows 服务,该服务在对所有网络源拥有(管理员)权限的域用户下运行。

在 Windows 服务开始时,我包含了以下代码:

My.User.InitializeWithWindowsUser()

如果我使用 IO.DriveInfo.GetDrives 来获取所有驱动器的集合,那么结果只是本地驱动器的集合,而不是网络驱动器(驱动器映射)。

我在这里想念什么?

注意:虽然我使用 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 回答