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

Вниз

Создание пароля   Найти похожие ветки 

 
AndreyK_   (2004-12-27 21:14) [0]

Уважаемые Мастера,помогите пожалуйста.
Вообще я хочу чтобы при первом запуске моей проги спрашивала пользователя ввести свой пароль. При следующем запуске, чтобы спрашивало введенный в первый раз пароль.
Запись его в отдельный файл не подходит.
Я создал RES файл, подключил к проекту. Загрузил в поток, проверил если там пароль. Если его нет то его надо туда добавить-этого я и не знаю.
Искал как это сделать, но не получилось найти.
Помогите, а то уже неделю мучаюсь.


 
Fay ©   (2004-12-27 21:19) [1]

>> Запись его в отдельный файл не подходит
Это почему?


 
Fay ©   (2004-12-27 21:22) [2]

Уверен на 99.99%, что в конечном итоге пароль окажется в файле 8)


 
Bork   (2004-12-27 21:23) [3]

т.е. надо записать пароль в реестр?


 
Fay ©   (2004-12-27 21:24) [4]

А реестр записан на каменных скрижалях, да?


 
Bork   (2004-12-27 22:08) [5]


> А реестр записан на каменных скрижалях, да?

Если бы он был чем-то материальным его бы уже давно пропили!!!


 
Bork   (2004-12-27 22:09) [6]


> А реестр записан на каменных скрижалях, да?

Если бы он был чем-то материальным его бы уже давно пропили!!!


 
AndreyK_1   (2004-12-27 22:33) [7]

Прога у меня один файл. Отдельный файл пользователь может нечайно удалить. Реестр- при переустановке Windows очищается.
А вообще я делаю так

var
Stream :TMemoryStream;
HResInfo: THandle;
MemHandle: THandle;
ResPtr: PByte;
ResSize: Longint;
password:string;
begin
HResInfo:=FindResource(HInstance, "MYPASSWORD","STRING");
MemHandle:=LoadResource(HInstance, HResInfo);
ResPtr:= LockResource(MemHandle);
Stream := TMemoryStream.Create;
ResSize := SizeofResource(HInstance, HResInfo);
Stream.SetSize(ResSize+SizeOf(password));
Stream.Write(ResPtr^, ResSize);
Stream.Write(password, SizeOf(password));
Stream.Seek(0, 0);

А что дальше делать я не знаю.


 
TButton ©   (2004-12-27 23:39) [8]


> Реестр- при переустановке Windows очищается.

реестр очищается и рег едитом, причем выборочно и гораздо быстрее.


 
ASoft   (2004-12-28 02:57) [9]

>>AndreyK_
Ты хочешь, что б пароль каждый раз прикомпилировался к EXE`шнику?


 
Erik1 ©   (2004-12-28 11:10) [10]

Неправильным путем идете товарищ! Недадо exe фаил мучать, это бесполезно, туда ничего незапишется.


 
Neznaika ©   (2004-12-28 11:20) [11]

>>Прога у меня один файл. Отдельный файл пользователь может >>нечайно удалить. Реестр- при переустановке Windows очищается.

Ну дак засунь этот файл подальше например Document and setting\ApplicationData\и т.д. и т.п.


 
Плохиш ©   (2004-12-28 11:21) [12]


>AndreyK_1   (27.12.04 22:33) [7]

>Прога у меня один файл. Отдельный файл пользователь может нечайно
>удалить. Реестр- при переустановке Windows очищается.

Ну и что, ну введёт пользователь пароль ещё раз, а ты его сохранишь. Он(пользователь) этого даже не заметит.


 
Neznaika ©   (2004-12-28 11:27) [13]


> Прога у меня один файл. Отдельный файл пользователь может
> нечайно удалить. Реестр- при переустановке Windows очищается.


Вообще с трудом представляю себе пользователя который лазиет в Program File и удаляет все что под руку попалось....


 
AndreyK_2   (2004-12-28 12:30) [14]

Так а вообще можно что-нибудь в exe записать?


 
Digitman ©   (2004-12-28 13:19) [15]


> AndreyK_2


можно.
файл с расширением ехе - такой же файл как и все прочие файлы


 
AndreyK_3   (2004-12-28 14:23) [16]

А во время выполнения программы можно например *.res записать в exe? Если можно то как (или никто не знает)?


 
Digitman ©   (2004-12-28 14:36) [17]


> во время выполнения программы можно например *.res записать
> в exe?


только недокументированными ("хакерскими") способами.
и лучше ими не пользоваться.

можно поступить, например, так :
1. реализовать dll, которая собственно и будет выполнять обновление ехе любым удобным способом

2. непосредственно перед завершением приложение вызывает на выполнение rundll32.ехе, передавая параметрами имя этой длл, имя ф-ции, производящей обновление ехе-файла, данные для обновления

3. стартовавшая длл ждет пока приложение завершится, а затем обычным образом открывает ехе-файл и производит в нем необходимые обновления


 
Svut   (2004-12-28 15:38) [18]

Вот листинг для записи данных в незапущенный exe.
unit AppendEXE;

interface

uses sysutils;

type
 TPayloadFooter = packed record
   WaterMark: TGUID;
   ExeSize: LongInt;
   DataSize: LongInt;
 end;

type
 TPayload = class(TObject)
 private
   fFileName: string;    
   fOldFileMode: Integer;
   fFile: File;          
   procedure Open(Mode: Integer);
   procedure Close;
 public
   constructor Create(const FileName: string);
   function HasPayload: Boolean;
   function PayloadSize: Integer;
   procedure SetPayload(const Data; const DataSize: Integer);
   procedure GetPayload(var Data);
   procedure RemovePayload;
 end;

const
 cReadOnlyMode = 0;
 cReadWriteMode = 2;
 cWaterMarkGUID: TGUID = // arbitrary watermark constant
   "{9FABA105-EDA8-45C3-89F4-369315A947EB}";

implementation

procedure InitFooter(out Footer: TPayloadFooter);
begin
 FillChar(Footer, SizeOf(Footer), 0);
 Footer.WaterMark := cWaterMarkGUID;
end;

function ReadFooter(var F: File;
 out Footer: TPayloadFooter): Boolean;
var
 FileLen: Integer;
begin
 FileLen := FileSize(F);
 if FileLen > SizeOf(Footer) then
 begin
   Seek(F, FileLen - SizeOf(Footer));
   BlockRead(F, Footer, SizeOf(Footer));
 end
 else
   FillChar(Footer, SizeOf(Footer), 0);
 Result := IsEqualGUID(Footer.WaterMark, cWaterMarkGUID);
end;

procedure TPayload.Close;
begin
 CloseFile(fFile);
 FileMode := fOldFileMode;
end;

constructor TPayload.Create(const FileName: string);
begin
 inherited Create;
 fFileName := FileName;
end;

procedure TPayload.GetPayload(var Data);
var
 Footer: TPayloadFooter;
begin
 Open(cReadOnlyMode);
 try
   if ReadFooter(fFile, Footer)
     and (Footer.DataSize > 0) then
   begin
     Seek(fFile, Footer.ExeSize);
     BlockRead(fFile, Data, Footer.DataSize);
   end;
 finally
   Close;
 end;
end;

function TPayload.HasPayload: Boolean;
begin
 Result := PayloadSize > 0;
end;

procedure TPayload.Open(Mode: Integer);
begin
 fOldFileMode := FileMode;
 AssignFile(fFile, fFileName);
 FileMode := Mode;
 Reset(fFile, 1);
end;

function TPayload.PayloadSize: Integer;
var
 Footer: TPayloadFooter;
begin
 Result := 0;
 Open(cReadOnlyMode);
 try
   if ReadFooter(fFile, Footer) then
     Result := Footer.DataSize;
 finally
   Close;
 end;
end;

procedure TPayload.RemovePayload;
var
 PLSize: Integer;
 FileLen: Integer;
begin
 PLSize := PayloadSize;
 if PLSize > 0 then
 begin
   Open(cReadWriteMode);
   FileLen := FileSize(fFile);
   try
     Seek(fFile, FileLen - PLSize - SizeOf(TPayloadFooter));
     Truncate(fFile);
   finally
     Close;
   end;
 end;
end;

procedure TPayload.SetPayload(const Data;
 const DataSize: Integer);
var
 Footer: TPayloadFooter;
begin
 RemovePayload;
 if DataSize > 0 then
 begin
   Open(cReadWriteMode);
   try
     InitFooter(Footer);
     Footer.ExeSize := FileSize(fFile);
     Footer.DataSize := DataSize;
     Seek(fFile, Footer.ExeSize);
     BlockWrite(fFile, Data, DataSize);
     BlockWrite(fFile, Footer, SizeOf(Footer));
   finally
     Close;
   end;
 end;
end;

end.


 
Svit ©   (2004-12-28 15:40) [19]

Опечатался, Svut - это я=)


 
AndreyK_4   (2004-12-28 21:12) [20]

Большое спасибо Svit и Digitman ©



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

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

Наверх




Память: 0.52 MB
Время: 0.141 c
1-1104053154
гость
2004-12-26 12:25
2005.01.16
запись в файл


14-1104070822
Genry
2004-12-26 17:20
2005.01.16
Работа с bat-файлом


1-1103098374
kingdom
2004-12-15 11:12
2005.01.16
Как найти пересечение фигур


6-1098539929
Григорьев Антон
2004-10-23 17:58
2005.01.16
Как зависит время пересылки IP-пакета от его длины?


1-1104155784
Gear
2004-12-27 16:56
2005.01.16
Delphi 2005 и Compact Framework .NET