1

インストールされているフォルダー/サブフォルダー以外のローカルファイルシステムにアクセスできないC#プログラムを作成できるかどうかお尋ねします。そして、答えが「はい」の場合はどうなりますか。詳細については、必要かつ可能であれば、ユーザーはプログラムがインストールされているフォルダーとサブフォルダーへのファイルアクセスのみに制限されている特別なユーザーアカウントで実行されるプログラムを受け入れることになっています。

事前にどうもありがとうございました。

編集:コンテキストを追加さ​​せてください。ユーザーが自分のアカウントを変更しないでほしい。また、プログラマーとして、何らかの理由でプログラムを完全に制御することはできません。

4

3 に答える 3

9

インストールされているディレクトリ以外のローカル ファイル システムのどの部分にもアクセスできない C# プログラムを作成できますか?

いいえ、すべての C# プログラムは、少なくとも Windows インストール ディレクトリにある .NET ランタイム ライブラリにアクセスできる必要があるためです。

あなたへの私の提案は、分離ストレージを検討することです。.NET コード アクセス セキュリティ システムを使用すると、特定のプログラムのみが .NET ランタイム、コードのインストール場所、およびアプリケーションが使用できる特別な「分離ストレージ」ディレクトリにアクセスできるようにするポリシーを設定できます。ユーザーごとのデータを保存します。

于 2012-04-10T14:48:56.953 に答える
1

答えはイエスですが、これを行う方法は複雑です。

まず、権限が非常に制限されたユーザー アカウントが必要です。プログラムのインストール ディレクトリ内でファイルにアクセスし、プログラムを実行できる必要があります。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 オブジェクトで指定します。このオブジェクトは、ショートカットを作成する「ブートストラップ」プログラムで使用されます。また、Environment.CurrentUser を使用して、そのユーザー アカウントのコンテキストでプログラムが実行されていることを確認し、より寛容なアカウントで実行されている場合は、プログラムの実行を中止することもできます。

于 2012-04-10T14:50:57.593 に答える
1

プログラムを特定のアカウントに制限したいだけの場合は、ユーザーの資格情報を調べて、適切でない場合はプログラムを終了できます。

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

于 2012-04-10T14:54:52.663 に答える