Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Закрытая тема
Настройки темы
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Ветеран


Сообщения: 1133
Благодарности: 581


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: jameszero
Дата: 08-11-2010
Описание: тема закрыта
Лимит страниц.
Тема закрыта.
Продолжение по ссылке Скрипты Inno Setup. Помощь и советы [часть 3]




Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
  • ISTool - неплохой редактор скриптов Inno Setup.
    Последняя версия: 5.3.0.1 [29.09.2009] - Скачать | зеркало;
    Предыдущая версия: 5.3.0 [07.04.2009] - Скачать (зеркало) | Русификатор (зеркало);

  • Inno Script Generator - ещё один редактор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать;

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы. Официальный сайт - недоступен.
    Последняя версия: 2.0.8 [12.11.2006] - Страница с зеркалами;

  • Inno Setup GameScript Generator - программа генерирует скрипты для Inno Setup . С помощью GameScript Generator и Inno Setup вы сможете быстро создать простенький инсталляционный пакет для любой игры. В инсталлятор можно встроить музыку, слайдшоу и фоновый рисунок. Для специалистов созданный скрипт, возможно, будет неплохой заготовкой для дальнейшей модернизации;

  • ISSkin - Программа для создания и добавления в инсталлятор скинов. Инструкция.
    Последняя версия: 3.0.0.0 [19.01.2010] - Скачать;

  • InnoSetup Script Joiner - Программа для объединения нескольких скриптов InnoSetup в один;

  • Converter - Программа конвертирует reg-файлы в формат *.iss (формат скриптов Inno Setup).
    Последняя версия: 0.1.3 [11.09.2009] - Скачать;


Ссылка на архив предыдущей темы (также можно скачать из вложения)

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.


Отправлено: 22:06, 23-08-2009

 

Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Цитата Serega:
если не заполняем эту директиву, то компилятор будет считать, что инсталлятор рассчитан на 32-х битную систему »
На вин7-64 если не стоит директива ArchitecturesInstallIn64BitMode=x64 - не заносятся параметры в реестр
Код: Выделить весь код
к примеру 
Root: HKLM; SubKey: SOFTWARE\Wow6432Node\GNU\ffdshow; ValueType: string; ValueName: pth; ValueData: {app}\FFDShow; Flags: uninsdeletevalue deletevalue; Check: IsWin64; Components: ffd
Root: HKLM; SubKey: SOFTWARE\GNU\ffdshow64; ValueType: string; ValueName: pth; ValueData: {app}\FFDShow64; Flags: uninsdeletevalue deletevalue; Check: IsWin64; Components: ffd
причем не срабатывает даже 
Check: IsWin64; Filename: {syswow64}\reg.exe; Parameters: /f add SOFTWARE\Wow6432Node\GNU\ffdshow /v pth /t REG_SZ /d {app}\FFDShow; StatusMsg: Регистрация RimPack; Components: ffd; Flags: runhidden waituntilterminated
Check: IsWin64; Filename: {syswow64}\reg.exe; Parameters: /f add HKLM\SOFTWARE\GNU\ffdshow64 /v pth /t REG_SZ /d {app}\FFDShow64; StatusMsg: Регистрация RimPack; Components: ffd; Flags: runhidden waituntilterminated
ключей
ставлю ArchitecturesInstallIn64BitMode=x64 - заносятся и без reg import
Отсюда и вопрос возник - как с такой директивой дистр чувствует себя на 32битных ОС. Habetdin уже ответил - нормально.
Ибо без нее на 64 битной ОС весьма хреново.

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 16:56, 04-08-2010 | #2161



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 3
Благодарности: 0

Профиль | Отправить PM | Цитировать


R.i.m.s.k.y. спасибо за такой ответ, но я имел в виду, чтобы инсталлятор при проверке версии через реестр выдавал ошибку о не совпадении версий или предлагал удалить старую версию.

И ещё, народ помогите разобраться вот с этим кодом, подкиньте пример! Заранее спасибо!

[code]

Код: Выделить весь код
  
function InitializeSetup(): Boolean;  
var    
   ResultCode: Integer;    
   s, ResultStr:string;  
begin  
Result:=True;  
If not RegKeyExists(HKLM, 'SOFTWARE\GSC Game World\STALKER-SHOC\')   
   then  
begin   
 MsgBox('S.T.A.L.K.E.R Тени Чернобыля v 1.0005 не установлен или установлен неверно.' #13#13 'Дальнейшая работа мастера невозможна.', mbError, mb_Ok);   
 Result:=False;   
end    
 else     
  begin    
 If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\','UninstallString', ResultStr)  
then
    begin
    If ResultStr<>''
  then
    begin
     ResultStr:=RemoveQuotes(ResultStr);    if MsgBox('Программа установки обнаружила уже установленную программу ранней версии.' #13#13 'Вы желаете предварительно удалить ее?', mbInformation, MB_YESNO) = idYes
  then
    if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode)
  then
    MsgBox('Ошибка удаления. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещен, удален или переименован.', mbError, MB_OK);
  end;
  end;
  end;
  end;

Последний раз редактировалось Diesel123denpda, 04-08-2010 в 18:27.


Отправлено: 18:16, 04-08-2010 | #2162


Аватара для dracosha

Пользователь


Сообщения: 80
Благодарности: 11

Профиль | Отправить PM | Цитировать


И снова здравствуйте!
Опять назрел вопрос:
читать дальше »
Код: Выделить весь код
function IsPreviousVersionUpdatable(): Boolean;
var
  version, major, minor, build, revis: string;
begin
  Result := false;
  if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + GetAppID('') + '_is1', 'DisplayVersion', version) then
    begin
      major := Copy(version, 0, Pos('.', version) - 1);
      Delete(version, 1, Pos('.', version));
      minor := Copy(version, 0, Pos('.', version) - 1);
      Delete(version, 1, Pos('.', version));
      build := Copy(version, 0, Pos('.', version) - 1);
      Delete(version, 1, Pos('.', version));
      revis := Copy(version, 0, Pos('.', version) - 1);
      Delete(version, 1, Pos('.', version));
      if CompareStr(major, ExpandConstant('{#MyAppVerMajor}')) = 0 then
        if CompareStr(minor, ExpandConstant('{#MyAppVerMinor}')) = 0 then
          if CompareStr(build, ExpandConstant('{#MyAppVerBuild}')) >= 0 then
            if CompareStr(revis, ExpandConstant('{#MyAppVerRevis}')) >= 0 then
              Result := true;
    end;
end;
Господа ГУРУ! Помогите пожалуйста исправить этот код что бы получилось примерно следующее:
1. Если в системе установлена версия 0.0.5.5 то старая версия 0.0.4.4 была равна false.
2. Если в системе установлена версия 0.0.5.5 то новая версия 1.1.0.0 была равна false.
3. Если в системе установлена версия 0.0.5.5 то новая версия 0.0.6.6 была равна true.

т.е. мне хотелось бы что б при обновлении Major или Minor обновление было не доступно, а если в версии обновлены только Build и Revis, а Major и Minor не обновлялись то обновление было доступно
Serega, помоги пожалуйста?

-------
Если есть за что, жми Полезное сообщение. Пользы больше - флуда меньше :)


Отправлено: 23:54, 04-08-2010 | #2163


Аватара для semiono

Ветеран


Сообщения: 836
Благодарности: 33

Профиль | Отправить PM | Цитировать


Есть ли возможность InnoSetup узнать размеры экрана десктопа текущего?

-------
Полезное сообщение


Отправлено: 00:40, 05-08-2010 | #2164


Аватара для nik1967

Старожил


Сообщения: 440
Благодарности: 251

Профиль | Сайт | Отправить PM | Цитировать


R.i.m.s.k.y.,
А не пробовал без "Wow6432Node" в строке реестра? Не знаю, у кого как, а у меня винда сама закидывает в реестре куда надо.
к примеру
Код: Выделить весь код
  
Root: HKLM; SubKey: SOFTWARE\GNU\ffdshow; ValueType: string; ValueName: pth; ValueData: {app}\FFDShow; Flags: uninsdeletevalue deletevalue; Check: not IsWin64; Components: ffd 
Root: HKLM; SubKey: SOFTWARE\GNU\ffdshow64; ValueType: string; ValueName: pth; ValueData: {app}\FFDShow64; Flags: uninsdeletevalue deletevalue; Check: IsWin64; Components: ffd

Отправлено: 08:26, 05-08-2010 | #2165


Аватара для nik1967

Старожил


Сообщения: 440
Благодарности: 251

Профиль | Сайт | Отправить PM | Цитировать


semiono,
DisplayRes
Код: Выделить весь код
[Setup]
AppName=DisplayResoltution
AppVerName=DisplayResoltution
DefaultDirName=DisplayResoltution
DisableStartupPrompt=true
Uninstallable=false
InternalCompressLevel=none
Compression=none

[_Code]
//functions to get BPP & resolution

//
// prototype for ISX 3.X
//
function DeleteDC(hDC: Integer): Integer; external 'DeleteDC@GDI32 stdcall';
function CreateDC(lpDriverName, lpDeviceName, lpOutput: String; lpInitData: Integer): Integer; external 'CreateDCA@GDI32 stdcall';
function GetDeviceCaps(hDC, nIndex: Integer): Integer; external 'GetDeviceCaps@GDI32 stdcall';

Const
    HORZRES = 8;    //horizontal resolution
    VERTRES = 10;   //vertical resolution
    BITSPIXEL = 12; //bits per pixel
    PLANES = 14;    //number of planes (color depth=bits_per_pixel*number_of_planes)

function InitializeSetup(): Boolean;
  var xres, yres, bpp, pl, tmp: Integer;
      hDC: Integer;
begin
    //get resolution & BPP
    hDC := CreateDC('DISPLAY', '', '', 0);
    pl := GetDeviceCaps(hDC, PLANES);
    bpp := GetDeviceCaps(hDC, BITSPIXEL);
    xres := GetDeviceCaps(hDC, HORZRES); //horizontal resolution
    yres := GetDeviceCaps(hDC, VERTRES); //vertical resolution
//    tmp := DeleteDC(hDC);
    bpp := pl * bpp;   //color depth

  	MsgBox( 'Current resolution is ' + IntToStr(xres) +
  		'x' + IntToStr(yres) +
  		' and color depth is ' + IntToStr( bpp )
  		, mbInformation, MB_OK );

    Result := false;
end;

Отправлено: 12:28, 05-08-2010 | #2166


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Цитата nik1967:
А не пробовал без "Wow6432Node" »
Нет, не пробовал, попробую

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 14:57, 05-08-2010 | #2167


Аватара для nik1967

Старожил


Сообщения: 440
Благодарности: 251

Профиль | Сайт | Отправить PM | Цитировать


R.i.m.s.k.y.,
И ещё обрати внимание на Check: not IsWin64 для x32 и Check: IsWin64 для x64.

-------
Если сообщение оказалось полезным для Вас, то помимо спасибо, можно нажать на "Полезное сообщение".


Отправлено: 15:19, 05-08-2010 | #2168


Ветеран


Сообщения: 1133
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата dracosha:
что б при обновлении Major или Minor обновление было не доступно, а если в версии обновлены только Build и Revis, а Major и Minor не обновлялись то обновление было доступно »
Если я правильно понял, то так:
читать дальше »
Код: Выделить весь код
const
  MyAppVerMajor = 1;
  MyAppVerMinor = 2;
  MyAppVerBuild = 3;
  MyAppVerRevis = 4;

function IsPreviousVersionUpdatable(): Boolean;
var
  version: string;
  major, minor, build, revis: Integer;
begin
  Result := False;
  if RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\' + GetAppID('') + '_is1', 'DisplayVersion', version) then
    begin
      major := StrToInt(Copy(version, 1, Pos('.', version) - 1));
      Delete(version, 1, Pos('.', version));

      minor := StrToInt(Copy(version, 1, Pos('.', version) - 1));
      Delete(version, 1, Pos('.', version));

      build := StrToInt(Copy(version, 1, Pos('.', version) - 1));
      Delete(version, 1, Pos('.', version));

      revis := StrToInt(Copy(version, 1, Pos('.', version) - 1));
      Delete(version, 1, Pos('.', version));
      
      if (major <= MyAppVerMajor) and (minor <= MyAppVerMinor) then
        Result:= (build < MyAppVerBuild) or (revis < MyAppVerRevis);
    end;
end;

Сразу замечание по коду, строка начинается с 1, а массивы обычно с 0, т.е.:
Цитата dracosha:
major := Copy(version, 0, Pos('.', version) - 1); »
грубейшая ошибка, копировать можно только с первого символа!

-------
Книги нужны, чтобы напоминать человеку, что его оригинальные мысли не так уж новы... Авраам Линкольн.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:20, 05-08-2010 | #2169


Аватара для R.i.m.s.k.y.

Ветеран


Сообщения: 1640
Благодарности: 536

Профиль | Отправить PM | Цитировать


Цитата nik1967:
И ещё обрати внимание на Check: not IsWin64 для x32 и Check: IsWin64 для x64 »
Первым делом расставил, думал этим и ограничится дело.

-------
Хороший установщик тот, которого не замечаешь
Оформление в инно пустая трата времени: толку мало, головняка много, а ошибок истчо больше!


Отправлено: 15:22, 05-08-2010 | #2170



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив] Скрипты Inno Setup. Помощь и советы [часть 2]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Inno Setup .:[все вопросы]:. Mchik Автоматическая установка приложений 1329 23-08-2009 20:13
[архив - Часть 2] AutoIt скрипты Vadikan AutoIt 985 21-01-2008 09:58
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59
[Архив - Часть 1.1] AutoIt скрипты EgOrus AutoIt 335 04-02-2006 16:58




 
Переход