2017-09-21 107 views
0

我有一個使用IronPython的特定函數,它在Python代碼中訪問當前目錄並創建一個臨時文件。當它稍後嘗試基於相對目錄路徑訪問該文件時,它無法獲取該文件,並從IronPython收到錯誤消息,該錯誤說明 "Access to the path 'D:\Windows\system32\file is denied"('file'是創建的唯一臨時文件)。當我以管理員身份在本地運行VS時,這一切都有效。如果我在本地運行而不是以管理員身份運行,則會收到相同的錯誤。當我將應用程序發佈到Azure上的應用程序服務時,它會給我提供access denied錯誤。「訪問路徑D:\ Windows \ system32 \文件被拒絕」Azure Web App

非常感謝你提前,並讓我知道你是否有任何其他問題。

回答

0

d:\ WINDOWS \ SYSTEM32 \文件將被拒絕

它是在Azure WebApp上設計的。 Azure Web應用程序(以及移動應用程序/服務,WebJobs和函數)在沙箱中運行。應用受到高度限制。如果我們想獲得更多關於WebApp的信息,請參考Azure Web App sandbox

訪問主目錄(d:\家庭)

每Azure的Web App有/存儲在主目錄由Azure存儲支持。這個網絡共享是應用程序存儲其內容的地方。 該目錄可用於具有讀/寫訪問權限的沙箱。

爲了方便我們的客戶,沙盒在內核模式下實現了動態符號鏈接,該鏈接將d:\ home映射到客戶主目錄。這樣做是爲了消除客戶在訪問網站時繼續參考他們自己的網絡共享路徑的需要。無論網站在哪裏運行,或者在虛擬機上運行了多少個站點,都可以使用d:\ home訪問其主目錄。

本地目錄的訪問(d:\本地)

每Azure的Web App有一個本地目錄是暫時的,當運行不再在VM上運行被刪除。 此目錄是存儲應用程序的臨時數據的地方。沙盒實現了一個動態符號鏈接,該鏈接將d:\ local映射到該目錄。該應用程序自然具有對此目錄的讀/寫訪問權限。

請注意,scm站點(Kudu運行的地方)中的d:\ local文件夾與主站點(運行Web應用程序的位置)不同。因此,他們無法看到彼此的本地文件。

+0

謝謝你的迴應!這非常有幫助。 – scouty

0

因爲那些操作系統文件,我不會寫東西到C:\ Windows \ system32。我會覺得更舒適的書寫,爲本地臨時目錄中的任何用戶正在運行的程序爲: %USERPROFILE%\應用程序數據\本地的\ Temp

+0

是的,我也試過這個。我嘗試手動指定將臨時文件放在App_Data文件夾中,但是當第三方python代碼嘗試在某個點執行時,它不會/無法保存到App_Data文件夾。如果我在我的項目之外指定一個文件夾,就像在我的桌面上一切都很好。也許python代碼沒有對App_Data文件夾的訪問權限? – scouty