簡體   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