无法从Windows服务访问驱动器映射的网络共享上的文件

时间:2010-06-23 02:13:04

标签: c# windows-services network-share mapped-drive

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

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

许多客户站点使用驱动器号作为网络共享,我无法始终控制它并强制它们指定UNC路径。我需要能够使用Windows服务中的驱动器号访问网络共享。

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

3 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:4)

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

您可以使用任何会话间通信方法来启动请求并在服务中获取结果,例如WCF,命名管道,套接字等。

答案 2 :(得分: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路径示例\ computername \ sharedname \ folder \ filename 4,只是fso.copyfile(uncpath,tempfoler,true) 5,你在temp文件夹中访问你的文件,他是预期访问和完美的工作

临时文件夹访问“c:\ windows \ temp,因为过程只能使用Windows临时文件夹

希望你能够完美地工作

感谢和问候

jagadeesh Govindaraj Pillai jagadeesh1492@facebook.com