Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.14;
Скачать: CL | DM;

Вниз

Куда установлена система   Найти похожие ветки 

 
dron-s ©   (2005-04-23 12:44) [0]

Как узнать букву диска, куда была установлена система?


 
VMcL ©   (2005-04-23 12:49) [1]

Какая система?


 
Anatoly Podgoretsky ©   (2005-04-23 12:56) [2]

Одназначно на диск С, остальные части где угодно и не обязательно на одном диске. Тебя какая часть интересует?


 
dron-s ©   (2005-04-23 13:02) [3]

Да не обязательно на диск С, может на любой другой диск, например на Е!!!! Как определить что она установлена на диск Е?


 
dron-s ©   (2005-04-23 13:03) [4]


> Какая система?


Windows XP...


 
Gero ©   (2005-04-23 13:05) [5]


> Одназначно на диск С

Неправда.
Диска C может и не быть.


 
dron-s ©   (2005-04-23 13:09) [6]


> Неправда.
> Диска C может и не быть.


Вот и про тоже...


 
Юрий Зотов ©   (2005-04-23 13:24) [7]

Гм... а что, разве нельзя взять диск из GetWindowsDirectory, или из SHGetFolderPath, или из переменных окружения SYSTEMROOT или SYSTEMDRIVE?


 
dron-s ©   (2005-04-23 13:34) [8]


> Юрий Зотов


Можно пример... срочно надо...


 
Eraser ©   (2005-04-23 13:36) [9]

dron-s ©
Как узнать букву диска, куда была установлена система?


Посмотреть загрузочную запись, а там уже в зависимости от системы. В XP на загрузочном диске должен быть файл boot.ini.


 
dron-s ©   (2005-04-23 13:45) [10]

I>
> загрузочную запись


и причём тут загрузочная запись...<


 
Юрий Зотов ©   (2005-04-23 14:01) [11]

> dron-s ©   (23.04.05 13:34) [8]

function GetSystemDrive: char;
var
 Buff: array[0..2] of char;
begin
 if GetEnvironmentVariable("SYSTEMDRIVE", @Buff, 3) = 2 then
   Result := Buff[0]
 else
   Result := #0
end;


 
dron-s ©   (2005-04-23 14:11) [12]

Огромное спасибо, Юрий!!!


 
Набережных С. ©   (2005-04-23 15:50) [13]

Имхо, на переменные окружения завязываться не стоит - мало ли что там может оказаться. GetWindowsDirectory вроде как для того и предназчена. Ну или там GetSystemDirectory.


 
trop   (2005-04-23 21:24) [14]

Можно сделать еще проще:
Procedure getsysdick;
var
p:Pchar;
Disk:string[1];
begin
getwindowsdirectory(p, max_path);
disk:=strpas(p)[1];
end;


 
Юрий Зотов ©   (2005-04-24 01:11) [15]

> Набережных С. ©   (23.04.05 15:50) [13]
ИМХО, эту переменную система сама и выставляет. Так что ничего другого там оказаться не может.

> trop   (23.04.05 21:24) [14]
И получили Access Violation.


 
Marser ©   (2005-04-24 01:34) [16]


trop   (23.04.05 21:24) [14]

Под PChar нужно ещё память выделить. Иначе [15].


 
Набережных С. ©   (2005-04-24 11:38) [17]


> Юрий Зотов ©   (24.04.05 01:11) [15]

Может, может:)))Попробуйте вот такой пример:

procedure TForm1.Button1Click(Sender: TObject);
var
 SI: TStartupInfo;
 PI: TProcessInformation;
 Env: Char;
begin
 FillChar(SI, SizeOf(SI), 0);
 SI.cb:=SizeOf(SI);
 Env:=#0;
 if CreateProcess(nil, "SysDrv.exe", nil, nil, false,
      CREATE_NEW_CONSOLE, @Env, nil, SI, PI) then
 begin
   CloseHandle(PI.hProcess);
   CloseHandle(PI.hThread);
 end else
   RaiseLastOSError;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 SI: TStartupInfo;
 PI: TProcessInformation;
 Buf: array[0..15] of Char;
 C: Char;
begin
 GetEnvironmentVariable("SYSTEMDRIVE", @Buf, SizeOf(Buf));
 C:=buf[0];
 Buf[0]:="U";
 SetEnvironmentVariable("SYSTEMDRIVE", @Buf);
 try
   FillChar(SI, SizeOf(SI), 0);
   SI.cb:=SizeOf(SI);
   if CreateProcess(nil, "SysDrv.exe", nil, nil, false,
        CREATE_NEW_CONSOLE, nil, nil, SI, PI) then
   begin
     CloseHandle(PI.hProcess);
     CloseHandle(PI.hThread);
   end else
     RaiseLastOSError;
 finally
   Buf[0]:=C;
   SetEnvironmentVariable("SYSTEMDRIVE", @Buf);
 end;
end;

Вот запускаемое приложение:

program SysDrv;

{$APPTYPE CONSOLE}

uses
 Windows,
 SysUtils;

function GetSystemDrive1: char;
var
Buff: array[0..2] of char;
begin
if GetEnvironmentVariable("SYSTEMDRIVE", @Buff, 3) = 2 then
  Result := Buff[0]
else
  Result := #0
end;

function GetSystemDrive2: char;
var
Buff: array[0..1023] of char;
begin
 FillChar(Buff, SizeOf(Buff), 0);
 GetWindowsDirectory(@Buff, SizeOf(Buff));
 Result:=Buff[0];
end;

var
 c: Char;
begin
 c:=GetSystemDrive1;
 if c <> #0 then WriteLn("1 System drive: " + c)
 else WriteLn("1 System drive: unknown");
 c:=GetSystemDrive2;
 if c <> #0 then WriteLn("2 System drive: " + c)
 else WriteLn("2 System drive: unknown");
 ReadLn;
end.

Разумеется, вероятность невелика, но зачем, если риска ничего не стоит избежать?



Страницы: 1 вся ветка

Текущий архив: 2005.06.14;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.045 c
8-1109190242
Shamansky
2005-02-23 23:24
2005.06.14
Масштабирование видеокартинки


4-1113852432
Jeson
2005-04-18 23:27
2005.06.14
помогите с форматированием винчестера в Delphi 7


6-1111871698
Raider
2005-03-27 00:14
2005.06.14
Описание ошибок TClientSocket&amp;TServerSocket (ErrorCode)


3-1115369002
Shark
2005-05-06 12:43
2005.06.14
Записи помеченные на удаление.


1-1117540421
makey
2005-05-31 15:53
2005.06.14
запись в текстовый файл длинных строк