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

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

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

Аватара для El Sanchez

Ветеран


Contributor


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


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

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


Изменения
Автор: El Sanchez
Дата: 16-02-2015
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме
Inno Setup. Прочие вопросы.


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

  • Inno Script Generator - генератор скриптов Inno Setup. Обладает некоторыми полезными функциями, которых нет ни у самого Inno Setup, ни у ISTool.
    Последняя версия: 1.0.3.1 [23.03.2008] - Скачать | зеркало на русифицированную программу;
    Примечание: Родной сайт www.hisoft2000.de более недоступен, поэтому здесь расположены сторонние ссылки.

  • Inno Setup Form Designer - редактор страниц Inno Setup, можно создавать свои страницы.
    Последняя версия: 2.0.8 [12.11.2006] - Скачать;
    Примечание: Родной сайт http://isfd.kaju74.de/index.php?isfd более недоступен, поэтому здесь расположены сторонние ссылки.

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

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

  • ISSJoiner - Программа для объединения нескольких скриптов InnoSetup в один.
    Последняя версия: 3.0 [23.07.2009]

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


Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах:

Отправлено: 19:06, 28-03-2013

 

Аватара для habib2302

Ветеран


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

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


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

-------
Помог? От "Полезное сообщение" не откажусь!!!


Отправлено: 23:56, 08-05-2013 | #401



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

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


Ветеран


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

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


habib2302,
Указываете в качестве DefaultDirName ключ реестра, содержащий информацию о рабочей папки программы.
Код: Выделить весь код
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,InstallLocation|{pf}\My Program}
Это сообщение посчитали полезным следующие участники:

Отправлено: 00:46, 09-05-2013 | #402


Старожил


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

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


habib2302,
читать дальше »
Вариант1
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={code:GetInstallDir}
AppendDefaultDirName=no

[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"

[code]
Function GetInstallDir(Path: String ): String;
begin
RegQueryStringValue(HKLM, 'SOFTWARE\Rockstar Games\EFLC', 'InstallPath', Path);//Какой ключ реестра ищет ...
Result := Path;
end;

function InitializeSetup(): Boolean;
begin
Result:= true;
if not RegKeyExists(HKLM, 'SOFTWARE\Rockstar Games\EFLC') then
MsgBox('Игра {#SetupSetting("AppName")} не найдена! Укажите путь к папке с игрой вручную!', mbinformation, mb_ok);
end;

Вариант 2:
[Setup]
AppName=GetDeviceInfo
AppVerName=GetDeviceInfo
DefaultDirName={code:GetInstallDir}

[code]
Function GetInstallDir( AppID: String ): String; var dir: String;
begin
if not RegQueryStringValue(HKLM, 'SOFTWARE\Company\ProgramNamePro', 'InstallLocation', dir) then
RegQueryStringValue(HKLM, 'SOFTWARE\Company\ProgramNameLight', 'InstallLocation', dir);
Result:= dir;
end;

function InitializeSetup(): Boolean;
begin
Result:= True;
if not RegKeyExists(HKLM, 'SOFTWARE\Company\ProgramNamePro') then
begin
if not RegKeyExists(HKLM, 'SOFTWARE\Company\ProgramNameLight') then
begin
MsgBox('Программа не найдена!', mberror, mb_ok);
Result:=False;
end;
end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:05, 09-05-2013 | #403


Аватара для Gnom_aka_Lexander

Ветеран


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

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


vint56, более корректно все-таки, это делать по AppID.да и гемора гораздо меньше. Меньше кода - меньше ошибок и глюков. Да и подавляющее большинство пачей, дополнений и тому подобной дряни - ищут программу именно по AppID в разделе Uninstall.

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.

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

Отправлено: 10:04, 09-05-2013 | #404


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


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

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


Спасибо всем за помощь.
Цитата saurn:
страничка с двумя эдитами - кастомная страница, создавать нужно в секции [code] »
Это мой первый скрипт и секция [code] для меня пока сильно сложная. Буду пробовать ваять.
Пока у меня получилось только это

[code]
Код: Выделить весь код
var
  DataDirPage: TInputDirWizardPage;
  
procedure InitializeWizard;
begin
  { Create the pages }
  
   DataDirPage := CreateInputDirPage(wpSelectDir,
    'Параметры по умолчанию', 'Установка папки по умолчанию',
    'Чтобы продолжить, нажмите кнопку Далее. Если вы хотите выбрать различные папки, нажмите кнопку Обзор',
    False, 'D:\');
  DataDirPage.Add('');

  { Set default values, using settings that were stored last time if possible }

  DataDirPage.Values[0] := GetPreviousData('DataDir', '');
end;

procedure RegisterPreviousData(PreviousDataKey: Integer);
var
  UsageMode: String;
begin
  { Store the settings so we can restore them next time }
  SetPreviousData(PreviousDataKey, 'UsageMode', UsageMode);
  SetPreviousData(PreviousDataKey, 'DataDir', DataDirPage.Values[0]);
end;
И то папка по умолчанию не ставится и не знаю как добавить ниже текст и эдитам.

Подскажите еще где нужно исправить в скрипте, что бы программа перед установкой определяла установлена ли программа (AviSynth) или нет. Если не установлена, то запускала установку.

Отправлено: 12:16, 09-05-2013 | #405


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


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

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


Подскажите как сделать эти два файла скрытыми
Код: Выделить весь код
[Files]
Source: {app}\Dvd_icon.ICO; DestDir: {app}; Flags: ignoreversion
Source: {app}\Dvd_uninstall.ico; DestDir: {app}; Flags: ignoreversion

Отправлено: 13:33, 09-05-2013 | #406


Аватара для Gnom_aka_Lexander

Ветеран


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

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


41275jur, hidden добавить во флаги. в справке-же есть.

-------
Я люблю помогать. Но не путайте: "Помогите мне" и "Сделайте за меня" - это совершенно разные понятия.

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

Отправлено: 13:46, 09-05-2013 | #407


Ветеран


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

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


Цитата 41275jur:
И то папка по умолчанию не ставится и не знаю как добавить ниже текст и эдитам.
Подскажите еще где нужно исправить в скрипте, что бы программа перед установкой определяла установлена ли программа (AviSynth) или нет. Если не установлена, то запускала установку. »
читать дальше »
Код: Выделить весь код
[Code]
var
  DataDirPage: TInputDirWizardPage;

function InitializeSetup(): Boolean;
begin
  if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1') then
  begin
    MsgBoxEx(0, 'Данная программа уже установленна', '', MB_OK, 0, 0)
    Result := False
  end else
    Result := True;
end;

procedure InitializeWizard;
begin
  DataDirPage := CreateInputDirPage(wpSelectDir, 'Параметры по умолчанию', 'Установка папки по умолчанию', 'Чтобы продолжить, нажмите кнопку Далее. Если вы хотите выбрать различные папки, нажмите кнопку Обзор', False, '');
  DataDirPage.Add('');
  DataDirPage.Add('');

  DataDirPage.Values[0] := 'D:\';
  DataDirPage.Values[1] := 'D:\';
end;

Цитата 41275jur:
Подскажите как сделать эти два файла скрытыми »
Код: Выделить весь код
[Files]
Source: {app}\Dvd_icon.ICO; DestDir: {app}; Flags: ignoreversion; attribs: hidden;
Source: {app}\Dvd_uninstall.ico; DestDir: {app}; Flags: ignoreversion; attribs: hidden;
Советую прикрутить сюда код для автоопределения диска установки из шапки http://forum.oszone.net/post-1217528-97.html , мало ли, вдруг у конечного пользователя не будет диска D

Последний раз редактировалось saurn, 09-05-2013 в 14:00.

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

Отправлено: 13:49, 09-05-2013 | #408


Аватара для El Sanchez

Ветеран


Contributor


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

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


Цитата 41275jur:
{code:settingsdir|workdir} - что оно обозначает »
41275jur, означает, что строковая константа есть результат функции settingsdir(param: String): String со значением переданного в нее строкового параметра, равным 'workdir', и описанной в секции Code. Подробнее: Inno Setup Help - Pascal Scripting - Scripted Constants.

Цитата 41275jur:
В реестре оригинальный инсталлятор прописывает ключ
Код:
[HKEY_LOCAL_MACHINE\SOFTWARE\DVD Rebuilder]
"Working_Path"="D:\\"
"Output_Path"="D:\\" »
Цитата 41275jur:
SetPreviousData(PreviousDataKey, 'UsageMode', UsageMode);
SetPreviousData(PreviousDataKey, 'DataDir', DataDirPage.Values[0]); »
Оригинальный инсталлятор читает эти пути из своего раздела реестра, необходимости в SetPreviousData нет, значение по умолчанию (D:\) не должно быть жестко заданным, у пользователя может оказаться только один логический диск. Можно взять первый логический диск после системного, а при отсутствии других дисков кроме системного брать сам системный. По крайней мере так я и реализовал.

Цитата 41275jur:
что бы программа перед установкой определяла установлена ли программа (AviSynth) или нет. Если не установлена, то запускала установку. »
41275jur, оригинал лезет в реестр в раздел деинсталлятора AviSynth и проверяет на пустое значение параметр DisplayName. Такой подход провалится, если программы на компе уже нет, а реестровые хвосты остались, поэтому лучше находить в реестре параметр, содержащий путь, и по полученному пути определить жив ли какой-либо файл по этому пути. Такая двойная проверка увеличивает шансы корректного определения наличия программы. У Inno немного таких параметров с путями, первый - InstallLocation - выдаст программную папку приложения, в ней уже можно проверить наличие или отсутствие, скажем, главного исполняемого файла программы, второй - UninstallString - выдаст полный путь к файлу деинсталлятора. У AviSynth в наличии только параметр UninstallString, его-то и будем использовать.

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

Код: Выделить весь код
[Code]
#define A = (Defined UNICODE) ? "W" : "A"

const
    MAX_PATH = 260;
    DRIVE_FIXED = 3;

function GetLogicalDriveStrings(nBufferLength: DWORD; var lpBuffer: Char): DWORD; external 'GetLogicalDriveStrings{#A}@kernel32.dll stdcall';
function GetDriveType(lpRootPathName: String): UINT; external 'GetDriveType{#A}@kernel32.dll stdcall';

var
    FoldersPage: TInputDirWizardPage;

//////////////////////////////////////////////////
function settingsdir(const param: String): String;
begin
    case param of
        'workdir': Result := FoldersPage.Values[0];
        'finishdir': Result := FoldersPage.Values[1];
    end;
end;

/////////////////////////////////////////////////////////////////
function GetFirstDriveAfterSystem(const Default: String): String;
var
    i: Integer;
    buf: array [0..MAX_PATH-1] of Char;
begin
    Result := Default;
    while i < GetLogicalDriveStrings(SizeOf(buf), buf[0])-3 do
    begin
        Result := Format('%s:\', [buf[i]]);
        if (GetDriveType(Result) = DRIVE_FIXED) and (CompareText(Result, Default) <> 0) then Break;
        i := i + 4;
    end;
end;

/////////////////////////////
procedure InitializeWizard();
begin
    FoldersPage := CreateInputDirPage(wpSelectProgramGroup, CustomMessage('titleset'), CustomMessage('explset'), SetupMessage(msgSelectDirBrowseLabel), False, '');
    FoldersPage.Add(CustomMessage('WorkFolder'));
    FoldersPage.Add(CustomMessage('OutFolder'));
    FoldersPage.Values[0] := ExpandConstant('{reg:HKLM\SOFTWARE\DVD Rebuilder,Working_Path|{code:GetFirstDriveAfterSystem|{sd}\}}');
    FoldersPage.Values[1] := ExpandConstant('{reg:HKLM\SOFTWARE\DVD Rebuilder,Output_Path|{code:GetFirstDriveAfterSystem|{sd}\}}');
end;

////////////////////////////////////
function InitializeSetup(): Boolean;
var
    ResultCode: Integer;
begin
    Result := FileExists(RemoveQuotes(ExpandConstant('{reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\AviSynth,UninstallString|}')));
    if not Result then
    begin
        if MsgBox(ExpandConstant('{cm:noAviSynth1}{cm:noAviSynth2}{cm:noAviSynth3}{cm:noAviSynth4}'), mbError, MB_YESNO) = IDYES then
        begin
            ExtractTemporaryFile('AviSynth_255.exe');
            Exec(ExpandConstant('{tmp}\AviSynth_255.exe'), '', '', SW_SHOW, ewWaitUntilTerminated, ResultCode);
            Result := ResultCode = 0;
            if not Result then MsgBox(ExpandConstant('{cm:noAviSynth5}{cm:noAviSynth6}{cm:noAviSynth7}{cm:noAviSynth8}'), mbError, MB_OK);
        end;
    end;
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:05, 09-05-2013 | #409


Аватара для Johny777

Ветеран


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

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


портировал с делфи интересную функцию ( GetEnvironmentVariable(...) ), кому надо забирайте:

читать дальше »
Код: Выделить весь код
[code]
#ifdef UNICODE
    #define A "W"
#else
    #define A "A"
#endif

//  Environment Variables:

//  ALLUSERSPROFILE
//  APPDATA
//  BDS
//  CLIENTNAME
//  CommonProgramFiles
//  COMPUTERNAME
//  ComSpec
//  Cor_Debugging_Control_424242
//  DBCONFIG
//  DBROOT
//  DBWORK
//  HOMEDRIVE
//  HOMEPATH
//  INCLUDE
//  LIB
//  LOGONSERVER
//  NUMBER_OF_PROCESSORS
//  OS_ROOTDIR
//  OS_TMPDIR
//  OS
//  Path
//  PATHEXT
//  PROCESSOR_ARCHITECTURE
//  PROCESSOR_IDENTIFIER
//  PROCESSOR_LEVEL
//  PROCESSOR_REVISION
//  ProgramFiles
//  SESSIONNAME
//  SystemDrive
//  SystemRoot
//  TEMP
//  TMP
//  USERDOMAIN
//  USERNAME
//  USERPROFILE
//  windir

function GetEnvironmentVariable(lpName, lpBuffer: String; nSize: DWORD): DWORD; external 'GetEnvironmentVariable{#A}@kernel32.dll stdcall';

function GetEnvVar(const VariableName: String): String;
var
    Len: DWORD;
begin
    Len := GetEnvironmentVariable(VariableName, '', 0);
    if Len > 0 then
    begin
        SetLength(Result, Len);
        GetEnvironmentVariable(VariableName, Result, Len);
    end;
end;


procedure InitializeWizard();
begin
    MsgBox(GetEnvVar('PROCESSOR_IDENTIFIER'), mbInformation, MB_OK);
end;
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:56, 09-05-2013 | #410



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Скрипты Inno Setup. Помощь и советы [часть 5] El Sanchez Автоматическая установка приложений 1999 28-03-2013 19:09
Скрипты Inno Setup. Помощь и советы [часть 4] El Sanchez Автоматическая установка приложений 2099 22-05-2012 23:16
Скрипты Inno Setup. Помощь и советы [часть 3] Serega Автоматическая установка приложений 3755 26-10-2011 17:58
[архив] Скрипты Inno Setup. Помощь и советы [часть 2] Serega Автоматическая установка приложений 2651 08-11-2010 18:34
Скрипты Inno Setup Compiler QAZAK Автоматическая установка приложений 7 15-01-2007 17:59




 
Переход