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);
}
}
}