Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

например в ОС: 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;

__________________
DelphiWorld 6, АVL 2.0.1.3
Alter вне форума   Ответить с цитированием
Старый 20.08.2018, 19:31   #2
Alter
Профессионал
 
Аватар для Alter
 
Регистрация: 06.08.2007
Адрес: Пустота
Сообщений: 2,210
Репутация: 982
По умолчанию

лучшее решение
Код:

shutdown -r -o -t 0

__________________
DelphiWorld 6, АVL 2.0.1.3
Alter вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу выйти в безопасный режим MrKredo Windows 12 13.06.2015 17: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


09:29.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru