Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.031 c
1-1104315116
snake_r
2004-12-29 13:11
2005.01.16
CheckBox d DBGrid


14-1103614248
Кудесник
2004-12-21 10:30
2005.01.16
По каким моментам кода вы понимаете - профи или так... ?


14-1103875670
ALexA
2004-12-24 11:07
2005.01.16
окраска DbMemo1


1-1104603637
Garfunkel
2005-01-01 21:20
2005.01.16
Цвета в WinXP


3-1102657832
zunder
2004-12-10 08:50
2005.01.16
Run-Time Error: Expression illegal in evaluator





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский