Как изменить права доступа к текущему пользователю с помощью учетных данных администратора?

Итак, я долго искал, и название объясняет, что я хочу делать. Кроме того, нет проблем с жестким кодированием учетных данных администратора в коде.

Первоначально я написал некоторый код на C #, который почти решил проблему:

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).

Заранее спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос