答えはイエスですが、これを行う方法は複雑です。
まず、権限が非常に制限されたユーザー アカウントが必要です。プログラムのインストール ディレクトリ内でファイルにアクセスし、プログラムを実行できる必要があります。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 を使用して、そのユーザー アカウントのコンテキストでプログラムが実行されていることを確認し、より寛容なアカウントで実行されている場合は、プログラムの実行を中止することもできます。