Написание и выполнение нескольких строк последовательно в командной строке с повышенными правами, используя c #

1

Я новичок в С#, и у меня есть 3 команды (command2, command3 и command4) Мне нужно выполнить в командной строке с повышенными правами, и я также хочу просмотреть процесс выполнения, как это происходит. В настоящее время проблема заключается в том, что приведенный ниже код просто открывает повышенную командную строку и без выполнения команд. Я также стараюсь лучше интерпретировать строки, если ошибаюсь.

Мой код и Интерпретация/Понимание каждой строки на основе обзоров подобных случаев: ConsoleApp1

class Program
{
    static void Main(string[] args)
    {
        string command2 = @"netsh wlan"; 
        string command3 = @" set hostednetwork mode=true ssid=egghead key=beanhead keyusage=persistent";
        string command4 = @" start hostednetwork";
        string maincomm = command2.Replace(@"\", @"\\") + " " + command3.Replace(@"\", @"\\") ; //I merged commands 2 and 3

        ProcessStartInfo newstartInfo = new ProcessStartInfo();
        newstartInfo.FileName = "cmd"; //Intend to open cmd. without this the newProcess hits an error saying - Cannot run process without a filename.
        newstartInfo.Verb = "runas"; //Opens cmd in elevated mode
        newstartInfo.Arguments = maincomm; //I intend to pass in the merged commands.
        newstartInfo.UseShellExecute = true; //
        newstartInfo.CreateNoWindow = true; // I intend to see the cmd window 

        Process newProcess = new Process(); //

        newProcess.StartInfo = newstartInfo; //Assigns my newstartInfo to the process object that will execute
        newProcess.Start(); // Begin process and Execute newstartInfo

        newProcess.StartInfo.Arguments = command4; //I intend to overwrite the initial command argument hereby passing the another command to execute.
        newProcess.WaitForExit(); //  
    }
}
  • 1
    В чем точная проблема?
  • 1
    Вы пытались использовать оператор конкатенации команд && ?
Показать ещё 1 комментарий
Теги:
cmd

1 ответ

1

Это то, что я сделал для преодоления этой проблемы, и дал мне именно то, что я хотел. Я изменил свой код, чтобы использовать System.IO для прямой записи в командную строку с повышенными правами.

            ProcessStartInfo newstartInfo = new ProcessStartInfo();
            newstartInfo.FileName = "cmd";
            newstartInfo.Verb = "runas";
            newstartInfo.RedirectStandardInput = true;
            newstartInfo.UseShellExecute = false; //The Process object must have the UseShellExecute property set to false in order to redirect IO streams.

            Process newProcess = new Process();

            newProcess.StartInfo = newstartInfo;
            newProcess.Start();
            StreamWriter write = newProcess.StandardInput ; //Using the Streamwriter to write to the elevated command prompt.
            write.WriteLine(maincomm); //First command executes in elevated command prompt
            write.WriteLine(command4); //Second command executes and Everything works fine
            newProcess.WaitForExit();

Referrence: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.standardinput(v=vs.110).aspx

http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo(v=vs.110).aspx

Я думаю, что понимание некоторых свойств ProcessStartInfo может прояснить ситуацию.

Глагол. Получает или задает глагол для использования при открытии приложения или документа, указанного в свойстве FileName., +The UseShellExecute - возвращает или задает значение, указывающее, следует ли использовать оболочку операционной системы для запуска процесса. +The FileName - возвращает или устанавливает приложение или документ для запуска документов MSDN.

Когда вы используете оболочку операционной системы для запуска процессов, вы можете запустить любой документ (который является любым зарегистрированным типом файла, связанным с исполняемым файлом, который имеет действие по умолчанию для открытого действия) и выполнять операции над файлом, такие как печать, с помощью объекта Process, Когда UseShellExecute является ложным, вы можете запускать только исполняемые файлы, используя Document объекта Process из MSDN.

В моем случае cmd является исполняемым. свойство глагола - это что-то, что отвечает на вопрос "Как мне запустить мое имя файла (для исполняемых файлов, например, cmd или любое приложение)?" за что я ответил - "runas", т.е. запускается как administrator. Когда FileName документ (например, "Somefile.txt), глагол отвечает на вопрос: „Что я должен делать с файлом, для которого ответ (глагол) может быть -“?„ И т.д., также „Edit“,“печать

используйте true, если оболочку следует использовать при запуске процесса; false, если процесс должен быть создан непосредственно из исполняемого файла. Значение по умолчанию - это истинные документы MSDN - UserShellInfo.

Еще одно замечание - знать, чего вы пытаетесь достичь. В моем случае я хочу иметь возможность запускать команды через исполняемый файл (приглашение cmd) с тем же процессом, то есть запускать cmd как процесс, который я могу отслеживать.

  • 0
    Мне было бы очень любопытно узнать, как у вас это работает (я не смог), поскольку кажется, что UseShellExecute = False НЕ работает с Verb = "runas" . Посмотрите этот ТАК вопрос по этому вопросу
  • 0
    @MickaelV. - Я не знал, как лучше всего ответить на ваш вопрос, поэтому я дал несколько длинных и информативных объяснений.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню