如果你的軟體需要訪問本地的檔案或檔案夾,並進行相關的操作時,那麼在Windows Service2003系統中部署時,總是碰到一些莫名其妙的錯誤,明明在其他地方可以運行,一部署後,就是不能運行,跟蹤調試時,才發現原來是許可權的問題。
設定windows服務的存取權限
如果你的程式裡面有一個windows服務,而且還要訪問本地的檔案,那麼你需要為windows服務的使用者佈建對這個檔案的存取權限。在 Windows 作業系統中,每個服務都運行在一個使用者帳戶安全上下文中。你可以在“電腦”—“管理”—“服務”裡面找到你的服務,然後右鍵“屬性”,切換到“登入”選項卡,你就可以看到你的服務是運行在哪個賬戶上的。
一般自己建立的服務都是AUTHORITY\LocalService這個賬戶。
像Sql Server是運行在NetworkService賬戶上的
(更多關於windows服務使用者賬戶,可以參考這篇文章Windows服務使用者賬戶)。
找到了這個使用者就好辦了,現在我們找到在Windows服務裡面會訪問的那個本地檔案夾。比如,你在程式裡面會操作C:\建立檔案夾,那麼你就把這個檔案夾選中,右鍵“屬性”——“安全”
一看,上面沒有LocalService這個使用者,沒關係,點擊“添加”
點擊“進階”
點擊“立刻尋找”
是不是看到了這個使用者。選中它。點擊確定,回到第一表單上。
選中這個使用者,為它賦予許可權,你可以根據實際需要賦予相應的許可權。
Ok,這樣就設定好了,你再通過Windows服務來訪問這個檔案,不管對它進行什麼操作都不會有許可權的問題了。
設定WebService的存取權限
如果你的程式會通過Web Service來訪問本地的檔案夾,那麼也需要設定許可權。Web Service也有一個使用者,這個使用者預設的就是NetWork Service使用者。
設定的步驟與上面的類似,也是找到那個檔案夾,然後尋找到這個使用者,如,然後點擊確定,最後賦給它相應的操作許可權。
設定完畢後,就可以順利的訪問了。
如果你嫌麻煩,你可以選中那個檔案夾,然後給它的EveryOne使用者賦予所有的許可權,那麼不管是Windows服務,還Web Service都可以進行訪問,不過這樣可能會帶來安全問題.