2010-06-23 89 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]