C# GetDrive在Windows服务中仅提供本地驱动器

C# GetDrive在Windows服务中仅提供本地驱动器,c#,vb.net,C#,Vb.net,我创建了一个Windows服务,该服务在对所有网络源具有(管理员)权限的域用户下运行 在Windows服务开始时,我包含了以下代码: My.User.InitializeWithWindowsUser() 如果我使用IO.DriveInfo.GetDrives获取所有驱动器的集合,那么结果只是本地驱动器的集合,而不是网络驱动器(驱动器映射) 我错过了什么 注意:虽然我使用VB.NET,但我也理解/知道C,所以我也用C来标记这个问题。因此,C#示例也很受欢迎 using System; usin

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

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

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

我错过了什么

注意:虽然我使用VB.NET,但我也理解/知道C,所以我也用C来标记这个问题。因此,C#示例也很受欢迎

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

我刚刚尝试了这个,它得到了包括网络在内的所有驱动器。希望有帮助。

这将取决于这些驱动器映射到什么位置。例如,驱动器映射可能是通过未运行的登录脚本设置的

如果是这种情况,您可以通过UNC路径引用驱动器,或者首先自己映射驱动器,这类事情:


这是因为误解。如中所述,
My.User.initializeWithIndowUser()
仅设置当前线程的主体。您的线程仅模拟用户。它不连接到存储网络映射的用户会话

要访问用户的映射驱动器,您需要访问当前登录的用户的桌面会话,这是没有意义的,因为可能没有用户登录

为了开玩笑,我编写了一个windows服务,当用户启动它时,它跨越登录用户的windows会话中的一个可执行文件,连接到outlook并向整个公司发送邮件“嘿,给每个人甜点,我请客!”


这就是您要查找的内容。

My仅在VB.Net中,在C#中不可用。此外,它将取决于运行服务的用户与已建立驱动器映射的用户。我不想自己映射它们,但是只是获取运行Windows服务的用户的可用映射。我使用的过程与您的过程一样。它可以在命令行中运行,但不能在Windows服务中运行。对不起,迈克,我错了。这必须是windows服务吗?作为一项服务,您将遇到一些问题。首先,如果没有用户登录,则无需报告任何内容,但主要问题是服务需要在当前用户凭据下运行,我不知道如何执行此操作。如果计划任务是一个选项,那么它肯定会是一个更容易选择的路线,尽管我不确定它是最好的还是最有效的;你有一个例子吗?我必须留下所有代码,所以我目前没有任何代码,但下面的链接可能会帮助你:查找“如何从Windows服务为用户运行应用程序”部分