わかりました、私はしばらく探していましたが、タイトルは私がやりたいことをほとんど説明しています。また、管理者資格情報をコードにハードコーディングしても問題はありません。
最初に、C#でコードを書き、ALMOSTが問題を解決しました:
private void button2_Click(object sender, EventArgs e)
{
DirectoryInfo myDirectoryInfo = new DirectoryInfo(textBox1.Text);
DirectorySecurity myDirectorySecurity = myDirectoryInfo.GetAccessControl();
string User = System.Environment.UserDomainName + "\\" + comboBox1.SelectedItem.ToString();
myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow));
//myDirectorySecurity.AddAccessRule(new FileSystemAccessRule(User, FileSystemRights.Write, InheritanceFlags.ContainerInherit, PropagationFlags.None, AccessControlType.Allow));
myDirectoryInfo.SetAccessControl(myDirectorySecurity);
MessageBox.Show("Permissions Altered Successfully" + User);
}
これは、既にアクセス許可を持っているフォルダーで使用すると問題なく機能しますが、必要なのは、管理者の資格情報を使用して、通常のユーザーが持っていないフォルダーにアクセス許可を付与する方法です。
後で、vbscript でいくつかのことを書き込もうとしました。
strHomeFolder = "C:\test"
strUser = " DOMAIN\user"
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "%COMSPEC% /c Echo Y| cacls "& strHomeFolder & " /e /c /g "& strUser &":F", 2, True
しかし、管理者の資格情報を渡す方法が見つかりませんでした。最後に、それを実行するために別のコードを書きました。
private void button1_Click(object sender, EventArgs e)
{
try
{
//string passwordPre = "PASSWORD";
//char[] passwordChars = passwordPre.ToCharArray();
//SecureString password = new SecureString();
//foreach (char c in passwordChars)
//{
// password.AppendChar(c);
//}
ProcessStartInfo p = new ProcessStartInfo(@"D:\\test.vbs");
//p.UseShellExecute = false;
//p.UserName = "username";
//p.Domain = "DOMAIN";
//p.Password = password;
Process.Start(p);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
今回は、プロセスを使用して管理者資格情報を渡そうとしましたが、次のメッセージが生成されました。指定された実行可能ファイルは、この OS プラットフォームに対して有効なアプリケーションではありません。
それで、資格情報を渡すために使用できる方法はありますか? (c# または vbscript で指定できます)。
前もって感謝します。