C# 防止用户删除、修改或删除外部文本

C# 防止用户删除、修改或删除外部文本,c#,text-files,C#,Text Files,我需要制作一个程序,从文本文件中读取数据,并根据文本文件中的特定数据更改程序状态,其中我的程序需要读取、写入和创建文本文件的权限 我希望阻止用户或其他软件删除、修改或复制该文件。我将如何开始实施这一点 可以通过三种方式实现: 1) 一旦应用程序启动,获取文件句柄并锁定文件。当然,这只有在应用程序一直运行(例如作为服务)的情况下才有效 2) 调整“文件安全”选项卡中的权限,并将其设置为只读。为写访问创建技术用户(在域中最有效)。使用impersionation(WindowsImpersonati

我需要制作一个程序,从文本文件中读取数据,并根据文本文件中的特定数据更改程序状态,其中我的程序需要读取、写入和创建文本文件的权限


我希望阻止用户或其他软件删除、修改或复制该文件。我将如何开始实施这一点

可以通过三种方式实现:

1) 一旦应用程序启动,获取文件句柄并锁定文件。当然,这只有在应用程序一直运行(例如作为服务)的情况下才有效

2) 调整“文件安全”选项卡中的权限,并将其设置为只读。为写访问创建技术用户(在域中最有效)。使用impersionation(WindowsImpersonationContext)时,与技术用户一起打开程序中的文件。使用将很简单:

using (new Impersonation(domain, username, password))
{
    // do whatever you want
}
将为您提供WindowsImpersonationContext的示例类(应该像一个符咒一样工作):

此处显示了另一次尝试(包括使用):


3) 显然,以具有访问权限的其他用户的身份运行程序-所有其他用户都具有只读权限(注册为服务或使用runas/user命令时使用技术用户)

您可以使用特定的访问条件打开文件()。 如果您拒绝此处的权限,应用程序将无法修改数据。 为了明确这一点,您的应用程序访问是只读的,您不能修改它

防止其他应用程序或用户删除/修改/任何在C#中不可能的文本文件。您可以限制文件系统中的权限,但仅此而已


如果这很重要,那么您应该重新考虑您的实现。C#在应用程序配置中为实例或特定于应用程序的参数提供资源文件

试着详细说明,展示一些样品等等。现在完全不清楚你在问什么以及你的问题是什么。让我重新表述一下,以确保我理解:你的软件从配置文件读取数据,你希望确保没有人篡改该文件。是吗?我猜他在找那个安德烈。到现在为止你都试过什么?是的,安德烈夫。我希望我的程序读取文本文件的内容并调整程序状态,例如显示一个页面以创建管理员帐户或以用户身份登录。无法阻止用户或其他程序读取或修改文件。Windows上的程序只能与运行该程序的用户具有相同的访问权限。您可以创建另一个运行程序的用户,并仅为该用户设置文件的访问权限,但该用户当然可以完全访问该文件,同一用户运行的任何其他程序也可以访问该文件。
[PermissionSet(SecurityAction.Demand, Name = "FullTrust")]
public class Impersonation : IDisposable
{
    private readonly SafeTokenHandle _handle;
    private readonly WindowsImpersonationContext _context;

    const int LOGON32_LOGON_NEW_CREDENTIALS = 9;

    public Impersonation(string domain, string username, string password)
    {
        var ok = LogonUser(username, domain, password,
                       LOGON32_LOGON_NEW_CREDENTIALS, 0, out this._handle);
        if (!ok)
        {
            var errorCode = Marshal.GetLastWin32Error();
            throw new ApplicationException(string.Format("Could not impersonate the elevated user.  LogonUser returned error code {0}.", errorCode));
        }

        this._context = WindowsIdentity.Impersonate(this._handle.DangerousGetHandle());
    }

    public void Dispose()
    {
        this._context.Dispose();
        this._handle.Dispose();
    }

    [DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
    private static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, out SafeTokenHandle phToken);

    public sealed class SafeTokenHandle : SafeHandleZeroOrMinusOneIsInvalid
    {
        private SafeTokenHandle()
            : base(true) { }

        [DllImport("kernel32.dll")]
        [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)]
        [SuppressUnmanagedCodeSecurity]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool CloseHandle(IntPtr handle);

        protected override bool ReleaseHandle()
        {
            return CloseHandle(handle);
        }
    }
}