C# GetDrive在Windows服务中仅提供本地驱动器
我创建了一个Windows服务,该服务在对所有网络源具有(管理员)权限的域用户下运行 在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
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服务为用户运行应用程序”部分