Скрипты Inno Setup. Помощь и советы [часть 4]

Ответить
 • Просмотры: 14
Аватара пользователя
TROY Diamond

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение TROY Diamond »

1. Значение "AppMutex", - дайте, пожалуйста, полный скрипт с его использованием!

Читай справку, типа скажете...

Вот, что это такое и куда вставлять, - я вообще не понял:

CreateMutex(nil, False, 'MyProgramsMutexName');

CreateMutex(NULL, FALSE, "MyProgramsMutexName");

2. "Определение класса приложения", как это как его определить?

Что это:

читать дальше »


Код:

Код: Выделить всё

function NextButtonClick(CurPage: Integer): Boolean; 
var 
sz:Integer; 
s:string; 
h:Longint; 
begin 
Result:=True; 
If CurPage=1 
then 
begin 
h:=FindWindowByClassName('My-Program-WINDOW'); 
If h0 then 
SendMessage(h, 16, 0, 0); //Вот это и есть закрытие программы 
end 
else 
If CurPage=6 then


Как мне название своего приложения записать и куда?

Мне нужно, чтобы если приложение запущено появлялось сообщение "Один экземпляр уже запущен", с предложением его закрыть.

А ещё лучше, чтобы приложение ЗАКРЫВАЛОСЬ САМО - ВООБЩЕ БЕЗ ЗАПРОСА, как при установке, так и при удалении...
Аватара пользователя
TROY Diamond

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение TROY Diamond »

TROY Diamond,


Цитата TROY Diamond:



Если есть скрипт оригинального установщика, - вообще отлично...
Скрипты Inno Setup. Помощь и советы [часть 4]




есть для стакера

наткнулся когда листал предыдущие ветки этой темы

писали здешние умы

http://rghost.ru/36232050


в нём есть сис. требования

они же есть и в шапке

вот тебе ещё 2 решения на проверку сис. требований

http://rghost.ru/36232112
Аватара пользователя
TROY Diamond

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение TROY Diamond »

Где взять дополнительные языки: Украинский, белорусский, например?



и почему когда я добавляю множество языков в секцию Lahguages, при установке можно выбрать, только Английский и русский?
Аватара пользователя
TROY Diamond

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение TROY Diamond »

Есть такая задача - перепаковать дистрибутив flylinkdc++(FlylinkDC-x86-r407-build-8559) c тем , чтобы удалить из него ненужный Yandex Bar . Распаковал его c помощью Universal Extractor 1.61 , нашел в папке tmp YandexPackSetup-flylinkdc2-20111031.exe - его удаляем . Но вот проблема , при попытке перекомпилировать (использую Inno Setup v 5.4.2 RUS Portable) ругается Required function or procedure 'Postfix' no found в строке AppName=FlylinkDC++{code:Postfix| }

Ссылок на postfix немало . Что-то внятное по поводу где взять функцию postfix точно подходящую в данном случае в Сети не нашел. Может опытные товарищи будут так добры направить на путь истинный ?
Аватара пользователя
R.i.m.s.k.y.

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение R.i.m.s.k.y. »

olmak, Postfix - это процедура из секции Code, она вытаскивается в лучшем случае бинарником

короче никак
Аватара пользователя
XXXler

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение XXXler »

olmak

Гугл






Код:

Код: Выделить всё

function Postfix(Separator: String): String; 
 begin 
   if Is64BitInstallMode then begin 
     Separator := Separator + 'x64'; 
     Result := Separator; 
   end; 
 end;
end;
Аватара пользователя
TROY Diamond

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение TROY Diamond »

Цитата Johny777:



кажется это из-за использования скина
Скрипты Inno Setup. Помощь и советы [часть 4]




Вовсе нет. Это попытка выгрузки dll до ее инициализации. Serega давал мне както такое решение:


читать дальше »




Код:

Код: Выделить всё

[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[*code]
var
  Initialize:Boolean;
function InitializeSetup(): Boolean;
begin
  Initialize:=False; // инициализация еще не произошла.
  // Ваш код
  Result:=True;
end;
procedure InitializeWizard();
begin
  // Ваш код
  Initialize:=True;// к этому моменту инсталл уже работает, значит инициализация прошла упешно
end;
procedure DeinitializeSetup();
begin
  if Initialize then // если произошла инициализация, то выгружаем все,что нужно, в противном случае, в этом нет необходимости
  begin
    UnloadSkin;
    gdipShutdown;
  end;
end;
Аватара пользователя
Gnom_aka_Lexander

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение Gnom_aka_Lexander »

Цитата Johny777:



ну если у Вас соединилось, то дайте пожалуйста результат, а то я в тупике
Скрипты Inno Setup. Помощь и советы [часть 4]





Как то так




Код:

Код: Выделить всё

[Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
OutputDir=.
[Languages]
Name: rus; MessagesFile: compiler:Languages\Russian.isl
[Files]
Source: descctrl.dll; Flags: dontcopy
[Tasks]
Name: need; Description: необходимо; GroupDescription: для првильной работы:; Check:
Name: need\no_steam; Description: выкл Steam (если включен); GroupDescription: для првильной работы:;
Name: need\direct_x; Description: установть/обновить DirectX; GroupDescription: для првильной работы;
Name: need\visual_c; Description: установть/отремонтировать VisualC++; GroupDescription: для првильной работы;
Name: need\hey; Description: ещё рекомендуется:; Flags: unchecked; GroupDescription: для првильной работы;
Name: need\hey\fonts; Description: установить шрифты; GroupDescription: для првильной работы;
[Components]
Name: "program"; Description: "Игра"; Types: full compact custom; Flags: fixed
Name: "help"; Description: "Помощь"; Types: full
Name: "Text"; Description: "Tехт"; Types: full
Name: "Text\en"; Description: "Aнглийский"; Flags: exclusive
Name: "Text\de"; Description: "Немецкий"; Flags: exclusive
Name: "Text\cn"; Description: "Китайский"; Flags: exclusive
Name: "Text\ru"; Description: "Русский"; Flags: exclusive
Name: "Voice"; Description: "Озвучка"; Types: full
Name: "Voice\en"; Description: "Английская"; Flags: exclusive
Name: "Voice\de"; Description: "Немецкая"; Flags: exclusive
Name: "Voice\ch"; Description: "Китайская"; Flags: exclusive
Name: "Voice\ru"; Description: "Русская"; Flags: exclusive
Name: "Voice\ru2"; Description: "Русская"; Flags: exclusive
Name: "Voice\ru3"; Description: "Русская"; Flags: exclusive
[_Code]
var
  Info, InfoCaption: TNewStaticText;
  InfoPanel: TPanel;
function enabledesc(ComponentsListHandle: HWND; DescLabelHandle: HWND; DescStrings: PChar): BOOL; external 'enabledesc@files:descctrl.dll stdcall';
function disabledesc(): BOOL; external 'disabledesc@files:descctrl.dll stdcall';
procedure InitializeWizard;
begin
  WizardForm.TYPESCOMBO.Visible:= false;
  WizardForm.ComponentsList.Height := WizardForm.ComponentsList.Height + WizardForm.ComponentsList.Top - WizardForm.TYPESCOMBO.Top;
  WizardForm.ComponentsList.Top := WizardForm.TYPESCOMBO.Top;
  WizardForm.ComponentsList.Width := ScaleX(200);
  InfoPanel:= TPanel.Create(WizardForm);
with InfoPanel do 
begin
  Parent:= WizardForm.SelectComponentsPage;
  Caption := '';
  SetBounds(ScaleX(216),WizardForm.ComponentsList.Top,ScaleX(200),WizardForm.ComponentsList.Height);
  BevelInner := bvRaised;
  BevelOuter := bvLowered;
end;
  InfoCaption := TNewStaticText.Create(WizardForm);
with InfoCaption do 
begin
  Parent:= WizardForm.SelectComponentsPage;
  Caption:= 'Информация:';
  Left:= ScaleX(224);
  Top:= InfoPanel.Top - ScaleY(5);
  Font.Color:= clActiveCaption;
end;
  Info:= TNewStaticText.Create(WizardForm);
with Info do 
begin
  Parent:= InfoPanel;
  AutoSize:= False;
  SetBounds(ScaleX(6),ScaleY(12),ScaleX(188),WizardForm.ComponentsList.Height - ScaleY(18));
  WordWrap:= true;
end;
end;
Procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpSelectComponents:
    begin
      InfoPanel.Parent:= WizardForm.SelectComponentsPage;
      InfoCaption.Parent:= WizardForm.SelectComponentsPage;
      Info.Caption:= 'Наведите на компонент, чтобы получить дополнительную информацию';
      disabledesc();
      enabledesc(WizardForm.ComponentsList.Handle,Info.Handle,
      'Короткое описание игры;'+ 
      'Дополнительная документация, на разных языках;'+
      'Техт игры;'+
      'Официальный английский текст от EA Games;'+
      'Официальный немецкий текст от неизвестного производителя;'+
      'Пиратский китайский текст;'+
      'Официальный русский текст от софтклаб;'+
      'Озвучка игры;'+
      'Официальная английская озвучка от EA Games;'+
      'Официальная немецкая озвучка от неизвестного производителя;'+
      'Пиратская китайская озвучка;'+
      'Официальная русская озвучка от софтклаб;'+
      'Русская озвучка от 7Wolf;'+
      'Русская озвучка от фаргуса;');
    end;
    wpSelectTasks:
    begin
      InfoPanel.Parent:= WizardForm.SelectTasksPage;
      InfoCaption.Parent:= WizardForm.SelectTasksPage;
      Info.Caption:= 'Наведите на задачу, чтобы получить дополнительную информацию';
      disabledesc();
      enabledesc(WizardForm.TasksList.Handle,Info.Handle,
      'Чтобы игра игралась;'+ 
      'Нужно сделать так;'+
      'Выключить Steam нафиг;'+
      'Зафигачить DirectX;'+
      'Намутить VisualC++;'+
      'А так же;'+
      'Воткнуть ненужные шрифты;');
    end; 
  end;
end;
procedure DeinitializeSetup();
begin
  disabledesc();
end;

Ну и не забыть добавить descctrl.dll





И ещё по Сталкеру




Код:

Код: Выделить всё

;Всем известная игра S.T.A.L.K.E.R. при установке использует некоторые хитрости. Дело не в проверке системных требований или свободного
;места на диске. Самый важный момент при инсталляции перепакованной игры - создать правильный файл "fsgame.ltx". Данный файл представляет
;собой некоторый загрузчик данных. Любое неправильное его построение чревато глюками и неправильной работе игры. Чтобы создать абсолютно
;точную копию оригинала нужно выполнить следующий код (не забываем при сборке, чтобы файл "fsgame.ltx" был абсолютно пустой):
[_Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
S: String;
begin
If CurStep=ssPostInstall then
begin
S := ExpandConstant('{commondocs}\STALKER-SHOC\')
StringChangeEx(S, ':\', ':\|', True);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$app_data_root$=true|false|' + S + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_data$         = false|    true|    $fs_root$|        gamedata\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_ai$         = true|        false|    $game_data$|        ai\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_spawn$     = true|        false|    $game_data$|        spawns\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_anims$         = true|        true|    $game_data$|        anims\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_levels$     = true|        false|    $game_data$|        levels\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_meshes$     = true|        true|    $game_data$|        meshes\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_dm$         = true|        true|    $game_data$|        meshes\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_shaders$     = true|        true|    $game_data$|        shaders\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_sounds$     = true|        true|    $game_data$|        sounds\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_textures$     = true|        true|    $game_data$|        textures\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_scripts$     = true|        false|    $game_data$|        scripts\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_config$     = true|        false|    $game_data$|        config\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$level$         = false|    false|    $game_levels$' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$game_saves$     = true|        false|    $app_data_root$|    savedgames\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$logs$         = true|        false|    $app_data_root$|    logs\' + #13, true);
SaveStringToFile(ExpandConstant('{app}')+'\fsgame.ltx', '$screenshots$     = true|        false|    $app_data_root$|    screenshots\' + #13, true);
end;
end;
Аватара пользователя
Serega

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение Serega »

Мне както Лександер подсказывал код, но он как вариант не подходит!!!

а то что можно сделать такой как я показал это 100%, я видел в какойто из версий Klite codec pack
Аватара пользователя
Gnom_aka_Lexander

Re: Скрипты Inno Setup. Помощь и советы [часть 4]

Сообщение Gnom_aka_Lexander »

lmiol, в твоем случае, без содания дополнительной страницы компонентов, и описания кучи условий, вариант только такой:


читать дальше »

Код: Выделить всё

[Setup]
AppName=Quake Live
AppVerName="Quake Live"
AppPublisher=Mio Dark Project
CreateAppDir=no
[Languages]
Name: ru; MessagesFile: compiler:Languages\Russian.isl;
[Types]
Name: "full"; Description: "Все компоненты";
Name: "custom"; Description: "Выбрать компоненты"; Flags:  iscustom
[Components]
Name: "main"; Description: "Cтандартные файлы Quake Live"; Types: full custom; Flags: fixed
Name: "main2"; Description: "Премиум файлы Quake Live"; Types: full custom;
Name: "plug"; Description: "Плагин Quake Live"; Types: full custom;
Name: "browser"; Description: "Портативный Firefox под Quake Live"; Types: full custom;
Name: "manual"; Description: "Руководство и Награды"; Types: full custom;
Name: "anti"; Description: "Античит PunkBuster"; Types: full custom;
[CustomMessages]
HeaderLabelPage=Выберите тип вашего аккаунта
MyRadioCaption_1=Standart
MyRadioCaption_2=Premium / Pro
PageTextHeader=На этой странице Вы можете выбрать тип вашего аккаунта, который вы используете в игре.
MyText_1=Будут установлены файлы которые доступны для игроков без подписки.
MyText_2=Будут установлены файлы которые доступны для игроков с Premium/Pro подпиской.
[*code]
var
  MyNewPage: TWizardPage;
  MyRadioBtn:ArraY[0..1]of TNewRadioButton;
procedure GetInstType;
begin
  WizardForm.ComponentsList.ItemEnabled[1]:= MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
  WizardForm.ComponentsList.Checked[1]:=MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
  WizardForm.ComponentsList.Checked[4]:=MyRadioBtn[1].Checked or not MyRadioBtn[0].Checked;
end;
procedure GetInstTypePage;
var
  i:integer;
begin
  MyNewPage := CreateCustomPage(wpWelcome,
  ExpandConstant('{cm:HeaderLabelPage}'), '');
  with TNewStaticText.Create(WizardForm) do
  begin
    Width := WizardForm.InnerNotebook.Width;
    Height := ScaleY(26);
    WordWrap := True;
    Caption := ExpandConstant('{cm:PageTextHeader}');
    Parent := MyNewPage.Surface;
  end;
  for i:=0 to 1 do
  begin
    MyRadioBtn[i] := TNewRadioButton.Create(WizardForm);
    with MyRadioBtn[i] do
    begin
      Parent := MyNewPage.Surface;
      Top := ScaleY(50+i*70);
      Width := ScaleX(150);
      case i of
        0: begin
          Caption := ExpandConstant('{cm:MyRadioCaption_1}');
          Checked := True;
        end;
        1:Caption := ExpandConstant('{cm:MyRadioCaption_2}');
      end;
    end;
    with TNewStaticText.Create(WizardForm) do
    begin
      Parent := MyNewPage.Surface;
      SetBounds(ScaleX(16),ScaleY(68+i*70),WizardForm.InnerNotebook.Width - ScaleX(60),ScaleY(26));
      WordWrap := True;
      case i of
        0:Caption := ExpandConstant('{cm:MyText_1}');
        1:Caption := ExpandConstant('{cm:MyText_2}');
      end;
    end;
  end;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
  if (PageID <= wpSelectDir)
    and (PageID = wpReady)
      and (MyRadioBtn[1].Checked)
        then Result := True;
end;
procedure InitializeWizard();
begin
  GetInstTypePage;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
  if CurPageID=wpSelectComponents then GetInstType;
end;
Цитата lmiol:



это 100%, я видел в какойто из версий Klite codec pack
Скрипты Inno Setup. Помощь и советы [часть 4]




Конечно можно. создаешь еще одну страницу компонентов и делаешь привязки к старой по каждому пункту. Сам.
Ответить

Вернуться в «Автоматическая установка приложений»