2014-01-17 104 views
0

我有一箇中等信任級別的主機,即時通訊使用imageresizer nuget包爲我的圖像進程。所以當我試圖使用ImageBuilder.Build我得到這個錯誤:Threading.Timer文件創建問題

Access to the path '(path)' is denied. 
System.UnauthorizedAccessException: Access to the path '(path)' is denied. 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 
    at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access) 
    at ImageResizer.ImageBuilder.BuildJob(ImageJob job) 
    at ImageResizer.ImageBuilder.Build(ImageJob job) 
    at ImageResizer.ImageBuilder.Build(Object source, Object dest, ResizeSettings settings, Boolean disposeSource, Boolean addFileExtension) 
    at ImageResizer.ImageBuilder.Build(Object source, Object dest, ResizeSettings settings, Boolean disposeSource) 
    at _10oy.UI.Web.Imager.Models.Downloader.SaveAndSetDimension(String path, Int32 width, Int32 height) 

btw:(路徑)的編輯我。

我研究錯誤,但我沒有找到任何有效的結果。

這裏是我的代碼(我稱其爲threading.timer,它可以是問題?)

public void SaveAndSetDimension(string path, int width, int height) 
    { 
     try 
     { 
      ImageBuilder.Current.Build(_MainStream, path, new ResizeSettings() { MaxWidth = width, MaxHeight = height }, false); 
     } 
     catch (Exception ex) 
     { 
      Results.Failed++; 
      DAL.Classes.Log.Write(
      message: ex.Message, 
      innerexcepition: ex.InnerException != null ? ex.InnerException.ToString() : ex.ToString(), 
      user: "Saver", 
      interfaces: 4 //Imager 
      ); 
     } 
    } 

我試圖常規文件在操作創建

public ContentResult CreateFile() 
    { 
     System.IO.File.Create(Server.MapPath("~/myfile.txt")); 

     return Content("File Created"); 
    } 

及其工作。

謝謝。

編輯:當我把它叫做正常動作時它的工作很好,但是當在定時器中調用時我得到了這個錯誤。

+0

您的手動CreateFile()方法可以寫入ImageResizer試圖寫入的* same *路徑嗎? – christofr

+0

是的,我嘗試過。它的工作。 – alim

+0

嗯,棘手。 ImageResizer可能將工作交付給需要更多特權的插件。你使用任何插件? – christofr

回答

0

我找到了。線程正在使用另一個Windows身份,因爲它不能創建文件或刪除或任何東西。我像那樣修復它;

像這樣從application_start等獲取標識。

 identity = System.Security.Principal.WindowsIdentity.GetCurrent(); 

之後,文件處理

 identity.Impersonate(); 

之前調用這個和它的工作。

0

你說你是從一個計時器調用它 - 是否有可能你有一個計時器的上一次運行還在嗎?嘗試確保每次運行計時器時都使用一個獨特的文件,以驗證您的程序沒有將自己的文件鎖定。

+0

你可以肯定,永遠不同的文件創建。所以它的獨特 – alim

+0

和它的工作在我的電腦(完全信任),當試圖在主機上工作,我得到這個錯誤。我將所有來自主機站點的許可(寫入讀取)授予所有文件。此外,我從filezilla授予ftp權限 – alim