【问题标题】:App unable to rewrite file saved by a Windows service应用程序无法重写由 Windows 服务保存的文件
【发布时间】:2012-10-15 07:11:23
【问题描述】:

问题是,我的 .NET Windows 服务(在 NT AUTHORITY\SYSTEM 下运行)在 ProgramData 内的文件夹中创建了一个文件,如果 Windows 应用程序试图覆盖它,它会得到一个 System.UnauthorizedAccessException。当前登录的用户有一个管理员帐户,但应用程序没有启动提升(我想避免它)。

如果服务在应用程序之后启动,则该文件由 UI 应用程序创建并且可以正常工作。是否可以让 .NET Windows 服务创建一个可以被 Windows 应用程序覆盖的文件?

【问题讨论】:

    标签: .net windows-services unauthorizedaccessexcepti programdata


    【解决方案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);
    

    【讨论】:

    • 谢谢!这很有帮助!但是我尝试将访问控制添加到每个人作为explained here,它在我的win应用程序中失败了(服务没有问题)。我应该只在服务应用中设置权限吗?
    • System.UnauthorizedAccessException:试图在System.IO.File.SetAccessControl 执行未经授权的操作。但是该服务可以毫无问题地完成它,然后编写就可以毫无问题地工作。但是由于此代码在两个应用程序之间共享,我想我必须在尝试设置访问控制之前检查谁在运行它(仅当 win 服务正在创建文件时才需要它)。这有意义吗?
    • 这意味着您运行应用程序的用户没有足够的权限来更改文件权限。那你说什么就解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多