2016-03-02 15 views
0

網絡路徑,我試圖讓:是一種持久性映射網絡驅動器:Directory.Exists在ASP.NET

Directory.Exists(@"E:\subdirectory") 

從ASP.NET運行時,當E返回「真」。我用下面的命令把它從我的用戶,其成功返回,不會提示輸入憑據的上下文中運行一個命令行映射:

net use E: \\servername\sharename /persistent:yes 

在這一點上,我完全在本地運行。

當我從控制檯應用程序或linqpad運行Directory.Exists行時,它將返回true。當我從運行在IIS下的ASP.NET應用程序(而不是 IIS express)運行此應用程序時,它將返回false。

我已更改我的應用程序池以使用與本地運行相同的用戶帳戶。我已驗證此功能已生效:

  • 檢查我的Windows進程列表並確保w3wp.exe正在我的用戶帳戶下運行。
  • 將我的ASP.NET應用程序附加到w3wp.exe並設置斷點,然後檢查Environment.UserName和Environment.UserDomainName以驗證我在我的用戶帳戶的上下文中運行。

但是,我的ASP.NET應用程序在檢查網絡共享時仍然返回false。

這是爲什麼?

+0

您是否嘗試過使用Server.MapPath? Directory.Exists(Server.MapPath(@「E:\ subdirectory」)); – Kramb

+1

'我想我有一個獨特的問題.'非常天真.. :) – Eser

+0

@Kramb,謝謝,但是引發了一個異常:'E:/子目錄'是一個物理路徑,但是一個虛擬路徑是預期的。 – tarun713

回答

1

映射網絡驅動器綁定到用戶會話。 IIS正在運行會話0,映射的驅動器正在最可能的會話1中運行。

我不知道有什麼方法可以讓網絡驅動器在您爲會話創建時爲其他會話顯示,我認爲您將不需要使用E:\,而是使用\\servername\sharename作爲路徑。

+0

這是行不通的,但不應該映射的驅動器堅持任何會議,因爲我標記它堅持? – tarun713

+0

不,如果您結束了會話,則堅持使其重新映射,然後使用同一用戶開始新會話。 –

+1

如果你真的想,[這裏是一個黑客](http://stackoverflow.com/a/4763324/80274),可以讓你在會話0內使用'net use E:\\ servername \ sharename/persistent:yes'它將被堅持爲那屆會議。做你自己的風險,我真的建議你不要使用它,而只是使用網絡路徑。 –