Мне нужно запустить команду оболочки «manage-bde» из кода C#.выполнить команду оболочки (manage-bde) как администратор с C#
Основной процесс приложения уже запущен как администратор и повышен.
Я использовал код из: Пример самоподобия UAC на веб-сайте MS для подтверждения процесса приложения. (http://code.msdn.microsoft.com/windowsdesktop/CSUACSelfElevation-644673d3)
Однако, когда я пытаюсь запустить manage-bde из кода C#, я получаю «Систему не удается найти указанный файл».
Process p = new Process();
p.StartInfo.FileName = "C:\\Windows\\System32\\manage-bde.exe";
p.StartInfo.UseShellExecute = true;
p.Start();
В качестве обходного пути я попытался создать командный файл, который запускает команду.
string batchFileName = DateTime.Now.Ticks + ".bat";
StreamWriter writer = new StreamWriter(batchFileName);
writer.WriteLine("manage-bde");
writer.Flush();
writer.Close();
Process p = new Process();
p.StartInfo.FileName = batchFileName;
p.StartInfo.UseShellExecute = true;
p.Start();
Пакетный файл написан и выполнен успешно; Однако команда «manage-bde» не распознается.
Я изменил код, чтобы использовать глагол «runas» и использовать пароль администратора, и это работает, но я хочу, чтобы командный файл работал без необходимости предоставления пароля администратора. Текущий зарегистрированный пользователь уже является администратором на компьютере, но пакетный файл не выполняется с существующими правами администратора. Мне нужен пакетный файл для выполнения и управления-bde для успешного запуска.
Вашей помощи или совета будет очень высоко оценил :)
пс: некоторые другие, чем управлять-BDE прекрасно работают без необходимости администратора команды RunAs.
'Я использовал код: пример самоподобия UAC на веб-сайте MS для подтверждения процесса приложения был повышен, если это так с этим связан значительный код, включая вызовы в собственный API Windows. Вы полностью выполнили решение? Он также использует Windows Identity Framework. Опять же, вы *** полностью внедрили решение в этом примере? –
Я добавил NativeMethods.cs и скопировал соответствующую функцию «IsElevated» из этого примера; функция возвращает true.Я использовал это только для подтверждения того, что мой процесс находится на повышенном уровне при запуске процесса пакетного файла – mymo
, вызывающего «RunAs» с именем пользователя и паролем, заставляет process.start вызывать собственный метод (CreateProcessWithLogonW). Это создает новый контекст безопасности и запускает приложение (manage-bde в этом случае) из него. Этот новый контекст безопасности представляет собой 64-битный контекст, который не перенаправляется при доступе к системе32. Если я не использую имя пользователя и пароль, вызываемый метод native будет: (CreateProcess). Это запустит новый процесс в том же контексте безопасности вызывающего приложения (которое представляет собой 32-битный контекст в моем случае выше). В результате доступ перенаправляется на syswow64, и файл не найден. – mymo