2010-06-23 128 views
7

我有一个网络共享文件夹映射到可从Windows资源管理器访问的命令提示符以及我的WinForms应用程序没有问题的驱动器号。它也可以使用UNC路径从我的Windows服务访问。无法从Windows服务访问驱动器映射网络共享上的文件

但是,当我尝试使用来自Windows服务的映射驱动器号访问此网络位置时,访问失败。 Windows服务配置为使用我的个人“登录”帐户凭据,这在所有上述情况下都是相同的。我是一名管理员。

许多客户站点使用驱动器号来存储网络共享,我不能总是控制它,并强制它们指定UNC路径。我需要能够使用来自Windows服务的驱动器号访问网络共享。

我需要做些什么来设置我的Windows服务,以便它可以访问映射到驱动器号的网络共享文件夹?我的Windows服务是用C#编写的。

回答

9

对不起; you can't access mapped drives from Windows services。正如Sheng建议的那样,您可以使用UI过程从映射驱动器获取UNC路径,然后将其传递给必须使用UNC路径的服务。

+0

谢谢你的文章。微软明确表示,不应该从Windows服务访问映射驱动器。 – Elan 2010-06-23 17:13:41

+0

引用的文章只声明服务不应该使用或更改驱动器映射,_does not_意味着它不能完成。在MS知识库文章中,它甚至暗指:“因此,在不同用户帐户下运行的进程之间不能共享重定向的驱动器。”换句话说,登录会话和服务必须在相同的凭据下运行。可以办到。 – Garen 2012-06-14 00:12:36

+0

@Garen:出于安全原因,Windows的每个主要版本都会增加服务与桌面代码之间的分离。 *有*方式强制它现在工作。也有办法在早期的Windows版本上强制它不再工作。它不受支持;您只需创建一个可能会在未来的Windows版本上打破的产品。 (我是从经验谈起......) – 2012-06-14 00:26:39

4

映射驱动器是每个会话对象。所以每个交互式会话都有自己的映射,服务会话有另一个驱动器映射。为了获得映射驱动器的正确UNC路径,您需要在正确的会话中调用WNetGetConnection。

你可以使用任何会话间通信的方法来发起请求,并在服务上,如WCF,命名管道,插座等得到的结果

+0

非常感谢。我能够使用pinvoke和WNetGetConnection将驱动器号转换为UNC路径! – Elan 2010-06-23 17:13:10

0

喜锐气我在我的项目面临着同样的问题,我找到了解决办法

,并工作预计按照我的步骤

    if (api.Docusign_download(strDocuSignUserName, strDocuSignPassword, strDocuSignIntegratorKey, EnvelopeID, Environment.ExpandEnvironmentVariables("%temp%")) == true) 
        { 
         if (m_streamWriter1 != null) 
         { 
          m_streamWriter1.WriteLine(" This envelop id is Downloaded and update the table" + EnvelopeID + DateTime.Now.ToShortDateString() + " " + DateTime.Now.ToShortTimeString() + "\n"); 
         } 

         fpath1 = Environment.ExpandEnvironmentVariables("%temp%") + '\\' + EnvelopeID + '1' + ".pdf"; 
         fpath2 = Environment.ExpandEnvironmentVariables("%temp%") + '\\' + EnvelopeID + '2' + ".pdf"; 
         if (System.IO.File.Exists(fpath1)) 
         { 
          fso = new FileSystemObject(); 
          // fso.CopyFile(fileLoc, "\\\\Tech-Pro-01\\D\\", true); i download the file in temp folder and copy file to unc path ur expected work on reverse like access file to unc path he does not work directly but work in in direct access like temp folder to services 
          fso.CopyFile(fpath1, UNC, true); 
          fso.CopyFile(fpath2, UNC, true); 
          fso.DeleteFile(fpath1, true); 
          fso.DeleteFile(fpath2, true); 
          //System.IO.File.Move(fileLoc, fileLocMove); 

我只是使用传统的应用程序脚本在VB FSO文件系统对象

1,确保您的地图路径访问在iuser和网络服务访问中启用映射提供的机器 2,添加参考系统脚本

3,和UNC路径例如\计算机名\ sharedname \文件夹\文件名 4,只是fso.copyfile(uncpath,tempfoler,真) 5,U访问临时文件夹中文件他预计访问和工作完美

临时文件夹的访问“C:\ WINDOWS \ TEMP,因为proceess可以利用Windows Temp文件夹只有

希望你的锐气,他是完美的工作

感谢和问候

jagadeesh Govindaraj皮莱 [email protected]