Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.07.2018, 13:56   #1
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,239
Сообщение Программно включить и выключить Безопасный режим загрузки

например в ОС: win 8, 8.1
UAC включен.
Программа всегда запускается от имени Администратора.

Команды работают, если вручную от имени Администратора запустить Командную строку и вводить:
Код:
bcdedit /set {current} safeboot minimal
bcdedit /deletevalue {current} safeboot
Но не работают, если из программы вызывать.

Пример вызова:
Код:
procedure TForm1.ONBtnClick(Sender: TObject);
var
  batFile :TStringList;
  batPath :string;
begin 
 ONBtn.Enabled := False;
 batFile := TStringList.Create;
  try
     try
   // batFile т.к. 'version 1' не сработал
   batPath := AppPath + 'bcdedit_safeboot_ON.bat';
   batFile.Add('bcdedit /set {current} safeboot minimal');
   batFile.Add('del /f /q bcdedit_safeboot_ON.bat');
   batFile.SaveToFile(batPath);
     finally
   FreeAndNil(batFile);
     end;
   if FileExists(batPath) then
    ShellExecute(0, 'open', PWideChar(batPath),'','', SW_SHOWNORMAL); // v4
//   StartProcess('cmd /C "' + batPath + '"', SW_SHOWNORMAL); // v2
//   runasAdmin(Handle, batPath); // v3
//   StartProcess('cmd /C "bcdedit /set {current} safeboot minimal"', SW_SHOWNORMAL); // version 1
  finally
 ONBtn.Enabled := True;
  end;
end;
Для запуска файлов, программ:
Код:
uses Windows, SysUtils, ShellAPI;

function StartProcess(FileName: string; ShowWindowMode :Word=SW_SHOW):Cardinal;
procedure runasAdmin(hWnd: HWND; exeFileName: string);

implementation

// StartProcess('cmd /C del /q /f updatelist.txt', SW_HIDE);
function StartProcess(FileName: string; ShowWindowMode :Word): Cardinal;
var
  zAppName: array[0..512] of char;
  zCurDir: array[0..255] of char;
  WorkDir: string;
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin // старт процесса с ожиданием завершения
  StrPCopy(zAppName, FileName);
  GetDir(0, WorkDir);
  StrPCopy(zCurDir, WorkDir);
  FillChar(StartupInfo, Sizeof(StartupInfo), #0);
  StartupInfo.cb := Sizeof(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := ShowWindowMode;
  if not CreateProcess(nil,
    zAppName, { указатель командной строки, путь к проге + аргументы }
    nil, { указатель на процесс атрибутов безопасности }
    nil, { указатель на поток атрибутов безопасности }
    false, { флаг родительского обработчика }
    CREATE_NEW_CONSOLE or { флаг создания }
    NORMAL_PRIORITY_CLASS,
    nil, { указатель на новую среду процесса }
    nil, { указатель на имя текущей директории }
    StartupInfo, { указатель на STARTUPINFO }
    ProcessInfo) { указатель на PROCESS_INF }
    then Result := Cardinal(-1)
  else
  begin
    WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
    GetExitCodeProcess(ProcessInfo.hProcess, Result);
  end;
end;

procedure runasAdmin(hWnd: HWND; exeFileName: string);
var
 SEI: TShellExecuteInfo;
 lpExitCode: DWORD;
begin // запустить программу от имени Администратора
 if not FileExists(exeFileName) then Exit;
 ZeroMemory(@SEI, SizeOf(SEI));
 SEI.cbSize := SizeOf(TShellExecuteInfo);
 SEI.Wnd := hWnd; // Handle App
 SEI.fMask := SEE_MASK_FLAG_DDEWAIT or SEE_MASK_FLAG_NO_UI;
 SEI.lpVerb := PChar('runas');
 SEI.lpFile := PChar(exeFileName); // App path
 SEI.nShow := SW_SHOWNORMAL;
 SEI.lpParameters:= '';
 if ShellExecuteEx(@SEI) then
 GetExitCodeProcess(SEI.hProcess, lpExitCode);
end;
Alter вне форума Ответить с цитированием
Старый 20.08.2018, 18:31   #2
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,239
По умолчанию

лучшее решение
Код:
shutdown -r -o -t 0
Alter вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу выйти в безопасный режим MrKredo Windows 12 13.06.2015 16:04
Безопасный режим Windows XP Feo Безопасность, Шифрование 2 16.02.2013 17:49
Обычный и Безопасный Режим Giku Windows 10 26.09.2012 21:54
не заходит в безопасный режим Лютик17 Операционные системы общие вопросы 3 18.06.2011 12:19