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

相关问题