Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 你能不能制作一个C程序,除了它安装的文件夹外,它不能访问任何本地文件系统?_C# - Fatal编程技术网

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

C# 你能不能制作一个C程序,除了它安装的文件夹外,它不能访问任何本地文件系统?,c#,C#,让我问一下,您是否可以制作一个C程序,该程序除了安装的文件夹/子文件夹外,不能访问任何本地文件系统?如果答案是肯定的,怎么办。 有关详细信息(如果必要和可能),用户应接受在特殊用户帐户下运行的程序,该帐户仅限制对安装的文件夹和子文件夹的文件访问 事先非常感谢 编辑:让我添加上下文。我希望用户不要更改他们的帐户。作为一名程序员,由于某些原因,我无法完全控制程序 你能制作一个C#程序,除了安装它的目录之外,它不能访问本地文件系统的任何部分吗 不需要,因为每个C#程序至少需要有权访问.NET运行时库,

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

事先非常感谢

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

你能制作一个C#程序,除了安装它的目录之外,它不能访问本地文件系统的任何部分吗

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

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

你能制作一个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对象中指定要运行程序的用户帐户来实现这一点,ProcessStartInfo对象由创建快捷方式的“引导程序”程序使用。然后,您还可以使用Environment.CurrentUser确保该程序在该用户帐户的上下文中运行,如果该程序由任何更具权限的帐户运行,则中止该程序的执行。

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

首先,您需要一个权限极其有限的用户帐户。它必须能够在程序的安装目录中访问文件和运行程序,基本上就是这样。您可以使用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对象中指定要运行程序的用户帐户来实现这一点,ProcessStartInfo对象由创建快捷方式的“引导程序”程序使用。然后,您还可以使用Environment.CurrentUser确保该程序在该用户帐户的上下文中运行,如果该程序由任何更具权限的帐户运行,则中止该程序的执行。

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



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



是的,但这是操作系统和网络权限的函数。这与你的程序无关。作为一名程序员,你难道不能控制你的程序调用或访问什么文件吗?例如,如果它是文本编辑器,则可以检查它是否只能打开或保存该文件路径目录中的文件。一般来说,如果显示“文件/打开”对话框,用户可以导航到其拥有权限的任何位置。当然,您可以拒绝任何不符合预期的路径,甚至可以构建自定义文件/打开对话框,但目的是什么呢?您可以对.NET appdomains:进行沙箱处理;我不知道权限的粒度有多细。@RobertHarvey,你能吗?我确认,因为我希望用户不更改帐户,但只有程序使用用户在安装中允许的特殊帐户。是的,但这是操作系统和网络权限的一个功能。这与你的程序无关。作为一名程序员,你难道不能控制你的程序调用或访问什么文件吗?例如,如果它是文本编辑器,则可以检查它是否只能打开或保存该文件路径目录中的文件。一般来说,如果显示“文件/打开”对话框,用户可以导航到其拥有权限的任何位置。当然,您可以拒绝任何不符合预期的路径,甚至可以构建自定义文件/打开对话框,但目的是什么呢?您可以对.NET appdomains:进行沙箱处理;我不知道权限的粒度有多细。@RobertHarvey,你能吗?我确认是因为我希望用户不要更改帐户,但只有程序使用用户在安装中允许的特殊帐户。