Пароль архива с сервера

Pipocooling

Участник
Прошу помочь привести в рабочее состояние функцию, смысл в том что пароль от архива находится на сайте в текстовом файле, функция по идее читает с сайта пароль и ставит в секцию распаковки архива.



Код:
function GETTEXT:boolean;
var WinHttpReq:Variant;
var responseText:String;
begin
   try
       WinHttpReq := CreateOleObject('WinHttp.WinHttpRequest.5.1');
       WinHttpReq.Open('GET', 'http://www.mysite.ru/text.txt', false);
       WinHttpReq.Send();
       responseText := WinHttpReq.ResponseText;
   except
       responseText := '';
   end;

//
//
//
//

if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data2.bin'), ExpandConstant('{app}'), '', false, '' + GETTEXT('') + '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
 

Avengerz13

Участник
Pipocooling, почитать про WinHttpRequest object можно здесь: https://msdn.microsoft.com/en-us/library/aa384106.aspx?f=255&MSPPError=-2147217396


Здесь просто проанализируем ваш код:
Указана переменная но не используется в коде.
except
responseText := '';
Обязательно пароль нужен для распаковки. В этом куске смысла нету.
if not ISArcExtract ( 0, 0, ExpandConstant('{src}\data2.bin'), ExpandConstant('{app}'), '', false, '' + GETTEXT('') + '', '', ExpandConstant('{app}'), notPCFonFLY {PCFonFLY}) then break;
Вы указали здесь значение функций GETTEXT которая ничего не делает с стрингами.

Черновой вариант, у меня нету компилятора.
Код:
[Code]
function DownloadFile(const YourFile: string; var YourResponse: string): Boolean;

var
  WinHttpRequest: Variant;

begin
  Result := True;
  try
   WinHttpRequest := CreateOleObject('WinHttp.WinHttpRequest.5.1');
   WinHttpRequest.Open('GET', YourFile, False);
   WinHttpRequest.Send;
   YourResponse:= WinHttpRequest.ResponseText;
  except
   Result := False;
   YourResponse:= GetExceptionMessage;
  end;
end;

procedure InitializeWizard;
var
  YourPassword: string;
begin
  if DownloadFile('http://www.example.com/text.txt', YourPassword) then
   MsgBox(YourPassword, mbInformation, MB_OK)
end;
 

Pipocooling

Участник
Avengerz13, спасибо, все нормально скомпилировалось, при запуске всплывает месижбокс с паролем, как теперь убрать месижбокс и добавить в if not ISArcExtract ?
Еще вопрос, файл http://www.example.com/text.txt куда-то скачивается или установщик прямо с сервера читает ?
 

Avengerz13

Участник
убрать месижбокс
then
MsgBox(YourPassword, mbInformation, MB_OK)
добавить в if not ISArcExtract ?
Использовать переменную YourPassword.

файл http://www.example.com/text.txt куда-то скачивается или установщик прямо с сервера читает ?
Не буду утверждать, проверьте папку temp установщика во время установки.
 

Pipocooling

Участник
Создается текстовый файл в директории, но внутри вместо пароля взятого с сервера пишется YourPassword, почему YourPassword в данной функции воспринимается как обычное слово ?
 
Последнее редактирование:

Nemko

Дилетант
Модератор
Возможно переменная YourPassword: string; объявлена в скрипте как локальная, а не глобальная. Проще говоря ее нужно добавить (переместить) в начало секции [Cоde].
 

nik1967

Old Men
Проверенный
Код:
[Code]
var
  WinHttpRequest: Variant;
  YourPassword: string;

function DownloadFile(const YourFile: string; var YourResponse: string): Boolean;
begin
  Result := True;
  try
   WinHttpRequest := CreateOleObject('WinHttp.WinHttpRequest.5.1');
   WinHttpRequest.Open('GET', YourFile, False);
   WinHttpRequest.Send;
   YourResponse:= WinHttpRequest.ResponseText;
  except
   Result := False;
   YourResponse:= GetExceptionMessage;
  end;
end;

procedure InitializeWizard;
begin
  if DownloadFile('http://www.example.com/text.txt', YourPassword) then
   MsgBox(YourPassword, mbInformation, MB_OK)
end;
Nemko правильно написал.
 

Pipocooling

Участник
Avengerz13, nik1967, Nemko, всем еще раз спасибо за помощь, заработало. Тему можно сносить поскольку вопросы исчерпаны да и задача была для личных целей, можно и оставить, поскольку я сам неоднократно находил нужную информацию в чужих темах не имеющих никакого отношения с тем что искал :)
 
Сверху