如何在.net中锁定文件,以便只有我的应用可以访问它?

时间:2011-01-31 10:02:46

标签: c# .net security file file-locking

我读了关于文件锁定的查询,但是他们或者引用了多个文件访问问题或其他问题。对此的响应是使用FileStream.Lock锁定文件,使用File.Open和File.Open等锁定文件,但锁定说100个文件不是一个好的编程习惯,在这些情况下,如果我的应用程序关闭/崩溃我也不会想要锁定,即我希望锁定持续存在,只有我的应用程序可以为其他人打开它。 / p>

在msdn上我找到了System.Security,System.Security.AccessControl命名空间,我相信这些可能有所帮助。另外this文章将阐明我想要的内容。

EDIT ::

Mannnnn ...有人提到我提供的“this”链接。

好吧......简而言之,我想要一些PC安全软件所做的事情。敲响了钟声......任何人都用它????

感谢。

6 个答案:

答案 0 :(得分:2)

这是不可能的。具有足够权限的用户始终可以更改安全设置并运行程序来访问您的文件。因此,假设您无法停止此操作,并专注于程序或用户可以对文件中的数据执行的操作。

加密。

答案 1 :(得分:1)

这里的要求存在一个基本缺陷,那就是文件系统只有一种阻止访问文件的方法,即通过ACL。您可以指定登录到系统的用户没有这些文件的访问权限,因此他无法使用这些文件。

但是,为了让您的程序能够访问这些文件,您需要设置一个“登录”的用户才能运行您的程序,当然任何其他程序都配置为以该用户身份运行有权访问这些文件。

其他锁定,例如打开文件以进行独占访问,就像您已经发现的那样只在程序运行时才有效。如果由于任何原因程序没有运行,那么这些类型的锁都没有到位。

你想要阻止什么具体?可能有其他方法来处理这种情况,而不是试图锁定文件。

答案 2 :(得分:1)

您可以加密文件并将密钥嵌入应用程序中。这取决于你的意思“只有我的应用可以为他人打开它。”

答案 3 :(得分:0)

我建议使用 IsolatedStorage 类。在那里,您可以存储一个直接“链接”到您的应用程序的文件。

MSDN IsolatedStorage中仔细查看。您可以使用程序集作用域文件。无论如何,每个用户都可以通过文件系统导航到 applicationData 文件夹并手动打开此文件(虽然这是相当意外的)

答案 4 :(得分:0)

您正在尝试找到一种方法来实现方法(“锁定”文件)而不是实现目标。

我假设你想要保存一些私人数据,并可选择提供对其他应用程序的数据访问。在这种情况下,您需要一个加密容器,可以将其暴露给其他应用程序,例如通过虚拟磁盘(在这种情况下,我们的SolFS OS edition是最佳变体)。

然而,问题是密钥将保存在应用程序的代码中,理论上可以提取并用于访问容器。实际上,程序可以变得更复杂,但这不是100%防弹解决方案。

答案 5 :(得分:0)

我认为您想要的东西只能通过使用文件系统minifilter驱动程序。许多其他应用程序通过使用通用屏蔽等驱动程序来提供此功能,您可以在其中将进程设置为受信任,因此只有受信任的进程才能访问该文件/文件夹,其他应用程序(如文件夹保护)也会在文件/文件夹上提供此类权限。