繁体   English   中英

你能制作一个 C# 程序,它不能访问除安装文件夹以外的任何本地文件系统吗?

[英]Can you make a C# program which can not access to any local file system other than the folder it is installed?

请问您是否可以制作一个 C# 程序,它不能访问除安装的文件夹/子文件夹之外的任何本地文件系统? 如果答案是肯定的怎么办。 有关详细信息,如果有必要和可能,用户应该接受在特殊用户帐户下运行的程序,该帐户将文件访问权限仅限于它安装的文件夹和子文件夹。

非常感谢你提前。

编辑:让我添加上下文。 我希望用户不要更改他们的帐户。 作为一名程序员,由于某些原因,我无法完全控制程序。

你能否制作一个 C# 程序,它只能访问安装目录以外的本地文件系统的任何部分?

不,因为每个 C# 程序至少需要访问 .NET 运行时库,这些库位于 Windows 安装目录中。

我对您的建议是研究隔离存储 .NET 代码访问安全系统使您能够设置一个策略,声明某些程序只能访问 .NET 运行时、代码的安装位置,以及一个特殊的“隔离存储”目录,该目录可用于应用程序存储每个-用户数据。

答案是肯定的,但如何做到这一点很复杂。

首先,您需要一个权限极其有限的用户帐户。 它必须能够访问程序安装目录中的文件和运行程序,仅此而已。 您可以使用 System.DirectoryServices 命名空间中的工具,通过安装程序创建这样的用户。 以下是创建用户的示例:

using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
private void CreateUser(string userName, string password)
{
DirectorySearcher dseSearcher = new DirectorySearcher();
string rootDSE = dseSearcher.SearchRoot.Path;
string userDSE = rootDSE.Insert(7, "OU=Users,");
DirectoryEntry userDE = new DirectoryEntry(userDSE);
DirectoryEntry user = userDE.Children.Add("CN=" + userID, "user");
staff.Properties["samAccountName"].Value = userID;
staff.Properties["UserPrincipalName"].Value = userName +
@"@domain";
staff.CommitChanges();
staff.Properties["userAccountControl"].Value =
ActiveDs.ADS_USER_FLAG.ADS_UF_NORMAL_ACCOUNT |
ActiveDs.ADS_USER_FLAG.ADS_UF_DONT_EXPIRE_PASSWD;
staff.CommitChanges();
staff.Invoke("SetPassword", new Object[] { password });
}

现在,一旦发生这种情况,您需要确保您的程序在该用户帐户的上下文中正常运行。 您可以通过在 ProcessStartInfo object 中指定用于运行程序的用户帐户来做到这一点,该程序由您为其创建快捷方式的“引导程序”程序使用。 然后,您还可以使用 Environment.CurrentUser 确保程序在该用户帐户的上下文中运行,如果程序正在由任何更宽松的帐户运行,则中止程序的执行。

如果您只想将程序限制为特定帐户,您可以查找用户的凭据,如果不正确则退出程序。

http://msdn.microsoft.com/en-us/library/csyx45b8.aspx
http://msdn.microsoft.com/en-us/library/sfs49sw0.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM