• Добро пожаловать на WYLEK.ru. Пожалуйста, войдите или зарегистрируйтесь.
 
83 гостей, 1 пользователь

  • InnoSetup Ultra 5 0 5 1
avatar_WYLEK

InnoSetup Ultra

Автор WYLEK, 01 мая 2011, 19:39:00

« предыдущая - следующая »

Leserg

Ответ #60 : 06 октября 2012, 09:30:00 #60
Цитата: Gnomесть несколько процедур InitializeWizard
Я правильно понял, что процедуры InitializeWizard можно переименовать, а оставить только одну. И вот в неё вставить обращение к этим, переименованным. Причем, в коде сначала должны идти переименованные процедуры, а только потом главная, т.е. так как ты показал в своем примере. Или порядок не играет роли? Хотя нет, наверное порядок важен.

Извините, вам запрещён просмотр содержимого спойлеров.
Кто ищет, тот всегда найдет!

Gnom

Ответ #61 : 06 октября 2012, 09:33:00 #61
с процедурами - все правильно. переименовывая - ты вместо встроенной получаешь свои, которые вызываешь тогда, когда тебе нужно. с функциями-же - все совершенно неоднозначно. просто приведи содержимое своих функций и я покажу, как нужно сделать именно в твоем случае, поскольку с функциями всегда разное решение их объединения.
 А модульное строение скрипта - это да, но от объединения все равно никуда не уйти, компилятор все равно обрабатывает все это как одну портянку, и соответственно дублирования не допустит.

Leserg

Ответ #62 : 07 октября 2012, 16:45:00 #62
Цитата: Gnomпросто приведи содержимое своих функций и я покажу, как нужно сделать...
Вот смотри две функции InitializeSetup() :
// функция инициализации звука
function InitializeSetup(): Boolean;
begin
   ExtractTemporaryFile('temp.wav');
   Play(ExpandConstant('{tmp}')+'  emp.wav');
   Result := True;
end;
// функция инициализации скина
function InitializeSetup(): Boolean;
begin
  ExtractTemporaryFile('temp.cjstyles');
  LoadSkin(ExpandConstant('{tmp} emp.cjstyles'), '');
  Result := True;
end;

Еще обратил, когда проверяю отдельно функцию воспроизведения звука, что если по каким-то причинам его проиграть не удалось (наверное функция возвращает False), то инсталлятор автоматически закрывается без каких-либо сообщений. Это можно как-то обойти? Т.е. если не удалось воспроизвести музыку, то продолжить работу инсталлятора, не закрывая его. Я так понимаю
if Result = False then ...
... а что делать дальше, не знаю.
Кто ищет, тот всегда найдет!

Gnom

Ответ #63 : 08 октября 2012, 08:14:00 #63
В твоем случае функции объединяются просто, как процедуры, поскольку они маленькие, то лучше просто собрать все в одну.
function InitializeSetup(): Boolean;
begin
   ExtractTemporaryFile('temp.wav');
   Play(ExpandConstant('{tmp} emp.wav'));
   ExtractTemporaryFile('temp.cjstyles');
   LoadSkin(ExpandConstant('{tmp} emp.cjstyles'), '');
   Result := True;
end;
по второму моменту, можно попробовать добавить в конце строчку:

if not Result then Result := true;
хотя, привязок результата к проигрыванию музыки нет, то скорей всего происходит крах инсталла при запуске команды Play, соответсвенно, нужно смотреть именно ее, в чем может быть причина.

Leserg

Ответ #64 : 09 октября 2012, 01:31:00 #64
Спасибо, буду пробовать.

Цитата: Gnomскорей всего происходит крах инсталла при запуске команды Play, соответсвенно, нужно смотреть именно ее

Э-э-э, как смотреть?

// \ 1 //*************************************************
//                    Воспроизведение звука          
// *****************************************************
const
   SND_FILENAME = $00020000;
   SND_SYNC = $0001;
function sndPlaySound(lpszSoundName: PansiChar; uFlags: cardinal):Integer;
external 'sndPlaySoundA@winmm.dll';
Procedure Play(filename:String);
begin
  sndPlaySound(filename,SND_FILENAME or SND_SYNC);
end;
//******************************************************
Кто ищет, тот всегда найдет!

Gnom

Ответ #65 : 09 октября 2012, 08:04:00 #65
Leserg, теперь смотри Вылет из установки бывает только на юникоде, так? На нескольких форумах уже отвечал, и тут недавно тоже. элементарное несоответствие типов.
 сопоставляем:

 function sndPlaySound(lpszSoundName: PansiChar; uFlags: cardinal):Integer;
Procedure Play(filename:String);
тоесть, зявляем мы явный тип PansiChar, точнее, этот тип и является родным для функции, ну точнее, можно посмотреть на MSDN:

BOOL sndPlaySound(
LPCTSTR lpszSoundName,
UINT fuSound
);
LPCTSTR можно представить как PAnsichar так и AnsiSrting, но никак не WideString, каковым в юникоде является тип string.
отсюда -
Procedure Play(filename:AnsiSrting); вот так будет правильно и работать будет как в анси, так и в юникоде.

Leserg

Ответ #66 : 10 октября 2012, 12:48:00 #66
Цитата: Gnomно никак не WideString, каковым в юникоде является тип string

Это меня натолкнуло заглянуть в справку к Unicode версии Inno Setup. Там есть такая строка:

 "If you want to compile an existing script that imports ANSI Windows API calls with the Unicode compiler, either upgrade to the "W" Unicode API call or change the parameters from "String" or "PChar" to "AnsiString". The "AnsiString" approach will make your [Code] compatible with both the Unicode and the non Unicode version.[/i]"

 В общем здесь сказано о том, о чем ты рассказал выше.

 Заменил "String" на "AnsiString" и вроде бы работает . Спасибо, что потратил на меня свое время.
Кто ищет, тот всегда найдет!

Gnom

Ответ #67 : 10 октября 2012, 16:41:00 #67
Leserg, мне нравится тратить время. это наверное, самый большой из моих минусов. с заменой в юникоде "String" на "AnsiString" нужно так-же быть аккуратнее, смело можно менять только в тех местах, где в этой перменной передается путь к файлу, в других случаях нужно уже смотреть точно параметры функций. многие API-функции имеют так-же юникодные аналоги, и это тоже нужно учитывать. в данном случае sndPlaySound относится к MMAPI, по сути довольно устаревшая и вроде-бы не имеет юникодных версий своих функций. в общем, головняк сплошной с этими функциями, которые берутся из системных библиотек

kaktustv

Ответ #68 : 14 октября 2012, 15:18:00 #68
Gnom, с таким вопросом, видимо, лучше обратиться к автору программы, но все-таки, может, какую-никакую логику поясните?
Суть в чем:
В инсталляторе нескольких програм лежат два идентичных исполняемых файла программы, отличающиеся только именами.

Извините, вам запрещён просмотр содержимого спойлеров.

И собственно вопрос: а зачем?
Файлы, повторяю, идентичны.

Gnom

Ответ #69 : 14 октября 2012, 22:22:00 #69
В общем, посмотрел - файлы идентичны на 100%. Единственная мысль - заложенная возможность объединить в один инсталлятор х86 и х64 версии с флагом IsWin64, других предположений нет.

WYLEKАвтор темы

Ответ #70 : 14 октября 2012, 23:58:00 #70
Цитата: GnomВ общем, посмотрел - файлы идентичны на 100%. Единственная мысль - заложенная возможность объединить в один инсталлятор х86 и х64 версии с флагом IsWin64, других предположений нет.

Я того же мнения, в прогах MiniTool.Partition та-же песня с екзешниками

kaktustv

Ответ #71 : 15 октября 2012, 19:49:00 #71
Ага. Стал-быть, можно безболезненно выбрасывать. Инсталл полегче будет.
 Спасибо за помощь.

Leserg

Ответ #72 : 04 февраля 2013, 01:12:17 #72
Баловался тут с компиляторами Delphi и сделал русский вариант файла Compil32.exe, соответственно версия ANSI и UNICODE, для Inno Setup v 5.5.3.

Войдите на сайт для перехода по ссылке

Версия ANSI была собрана из исходников в Delphi 3, а версия UNICODE - в Delphi 2009, согласно рекомендациям разработчика. Ошибок при сборке не было, поэтому по идее должно все работать.

Глубоко не копал, переводил только следующие файлы:
CompForm.pas
CompMsgs.pas
CompOptions.pas
CompSignTools.pas
CompWizard.pas
CompWizardFile.pas
CompForm.dfm
CompOptions.dfm
CompSignTools.dfm
CompStartup.dfm
CompWizard.dfm
CompWizardFile.dfm

После установки официальной версии Войдите на сайт для перехода по ссылке, замените файл Compil32.exe в каталоге установки на русифицированный, соответственно версии компилятора (ANSI или UNICODE). Можете сделать резервную копию исходного файла перед заменой.

Кто собирает инсталляторы в Inno, проверьте в работе и отпишитесь, стоит ли овчинка выделки.
Кто ищет, тот всегда найдет!

WYLEKАвтор темы

Ответ #73 : 04 февраля 2013, 21:35:00 #73
Цитата: LesergКто собирает инсталляторы в Inno, проверьте в работе и отпишитесь, стоит ли овчинка выделки.

Проверил несколько скриптов - все нормально.

Теперь по переводу...

step into - наконец то правильный перевод - Войдите на сайт для перехода по ссылке
step over - и здесь тоже Войдите на сайт для перехода по ссылке
я сам грешил как было переведено раньше - шаг в и шаг за, но в Inno Script Studio и в Photo Supreme сделал уже правильный перевод.
Выполнить до курсора - мне кажется что это Запуск с курсора или Выполнить от курсора, но это точнее скажет Gnom
Переключить точку останова - лучше Вставить Breakpoint, тем, кто в коде работает, так понятнее.

Gnom

Ответ #74 : 05 февраля 2013, 13:26:00 #74
Выполнить до курсора - правильно. поскольку не может быть пропущен кусок кода, чтоб начать выполнение только с той строки, на которой стоит курсор.
 Вставить Breakpoint - поддерживаю, так понятнее. в крайнем случае5 можно так: Вставить Breakpoint(точка остановки)

* Ваши права на сайте

    TinyPortal

  • Вы не можете создавать статьи.
  • Вы не можете изменять свои статьи.
  • Вы не можете писать комментарии.
  • Вы не можете управлять статьями.
  • Вы не можете загружать файлы в TPdownloads.
  • Вы не можете управлять TPlistimages.

    Simple Machines

  • Вы не можете удалять темы.
  • Вы не можете создавать темы.
  • Вы не можете отвечать на сообщения.
  • Вы не можете прикреплять файлы.
  • Вы не можете изменять свои сообщения.
  • Вы не можете удалять свои сообщения.

 аталог@MAIL.RU - каталог ресурсов интернет Яндекс.Метрика