0

問題是,我的.NET Windows服務(在NT AUTHORITY\SYSTEM下運行)在ProgramData內的文件夾中創建文件,如果Windows應用程序嘗試覆蓋該文件,它將獲得System.UnauthorizedAccessException。目前登錄的用戶有一個管理員帳戶,但該應用程序沒有開始提升(我想避免它)。應用程序無法重寫由Windows服務保存的文件

如果服務在應用程序之後啓動,那麼該文件是由UI應用程序創建的,並且工作正常。是否有可能使.NET Windows服務創建可以被Windows應用程序覆蓋的文件?

回答

1

它只是關於文件權限。您需要爲希望能夠運行該應用程序的用戶添加寫入條目。關於如何設置,請參閱此MSDN article

關鍵部分:

// Get a FileSecurity object that represents the 
// current security settings. 
FileSecurity fSecurity = File.GetAccessControl(fileName); 

// Add the FileSystemAccessRule to the security settings. 
fSecurity.AddAccessRule(new FileSystemAccessRule(account, 
       rights, controlType)); 

// Set the new access settings. 
File.SetAccessControl(fileName, fSecurity); 
+0

謝謝!這很有幫助!但我試圖添加訪問控制到[這裏解釋](http://stackoverflow.com/a/6533772/1488067),並在我的贏取應用程序(服務沒有問題)內失敗。我應該只在服務應用程序中設置權限嗎? – Lou

+0

它如何失敗? –

+0

'System.UnauthorizedAccessException':試圖在'System.IO.File.SetAccessControl'執行未經授權的操作。但是這項服務沒有問題,然後寫作毫無問題。但由於這兩個應用程序之間共享此代碼,因此我想在設置訪問控制之前必須檢查誰在運行它(只有在win服務正在創建文件時才需要)。那有意義嗎? – Lou

相關問題