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

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

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

Сообщение elmariacci »

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

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

Сообщение ilya_klimovich »

habib2302,

Указываете в качестве DefaultDirName ключ реестра, содержащий информацию о рабочей папки программы.



Код:

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

DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,InstallLocation|{pf}\My Program}
Аватара пользователя
nik1967

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

Сообщение nik1967 »

habib2302,


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


Вариант1

[Setup]

AppName=My Program

AppVerName=My Program 1.5

DefaultDirName={code:GetInstallDir}

AppendDefaultDirName=no



[Languages]

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


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


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;
Аватара пользователя
ilya_klimovich

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

Сообщение ilya_klimovich »

Спасибо всем за помощь.


Цитата saurn:



страничка с двумя эдитами - кастомная страница, создавать нужно в секции

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

 [url=viewtopic.php?p=2787026#p2787026]»[/url]
		
	
	
Это мой первый скрипт и секция [code] для меня пока сильно сложная. Буду пробовать ваять.

Пока у меня получилось только это


[url=#]читать дальше »[/url]

[url=http://fastpic.ru/view/48/2013/0509/bd89e484bac91ea2a8a7bcfc82ecb5b3.png.html][/url]

 

[code]
 
 Код: [url=#][/url]
 [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) или нет. Если не установлена, то запускала установку.
Аватара пользователя
audiofeel

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

Сообщение audiofeel »

Подскажите как сделать эти два файла скрытыми



Код:

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

[Files]
Source: {app}\Dvd_icon.ICO; DestDir: {app}; Flags: ignoreversion
Source: {app}\Dvd_uninstall.ico; DestDir: {app}; Flags: ignoreversion
Аватара пользователя
ilya_klimovich

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

Сообщение ilya_klimovich »

insombia

NFS Most Wanted



audiofeel


может вы и правы, но все таки?) извиняюсь за настойчивость)
Аватара пользователя
ilya_klimovich

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

Сообщение ilya_klimovich »

Цитата 41275jur:



И то папка по умолчанию не ставится и не знаю как добавить ниже текст и эдитам.

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





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




Код:

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

[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:



Подскажите как сделать эти два файла скрытыми
Скрипты Inno Setup. Помощь и советы [часть 6]






Код:

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

[Files]
Source: {app}\Dvd_icon.ICO; DestDir: {app}; Flags: ignoreversion; attribs: hidden;
Source: {app}\Dvd_uninstall.ico; DestDir: {app}; Flags: ignoreversion; attribs: hidden;

Советую прикрутить сюда код для автоопределения диска установки из шапки
[архив] Скрипты Inno Setup. Помощь и советы [часть 2]
, мало ли, вдруг у конечного пользователя не будет диска D
Аватара пользователя
Nightwishh

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

Сообщение Nightwishh »

Цитата 41275jur:



{code:settingsdir|workdir} - что оно обозначает
Скрипты Inno Setup. Помощь и советы [часть 6]




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:\\"
Скрипты Inno Setup. Помощь и советы [часть 6]





Цитата 41275jur:



SetPreviousData(PreviousDataKey, 'UsageMode', UsageMode);

SetPreviousData(PreviousDataKey, 'DataDir', DataDirPage.Values[0]);
Скрипты Inno Setup. Помощь и советы [часть 6]




Оригинальный инсталлятор читает эти пути из своего раздела реестра, необходимости в SetPreviousData нет, значение по умолчанию (D:\) не должно быть жестко заданным, у пользователя может оказаться только один логический диск. Можно взять первый логический диск после системного, а при отсутствии других дисков кроме системного брать сам системный. По крайней мере так я и реализовал.




Цитата 41275jur:



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




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;
Аватара пользователя
saurn

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

Сообщение saurn »

Nightwishh, про Parent прогресс-бара забыли, а то он сныкается вместе с внешним Notebook.





Код:

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

procedure CurPageChanged(CurPageID: Integer);
begin
  case CurPageID of
    wpInstalling:
    begin
      WizardForm.ProgressGauge.Parent := WizardForm;
      WizardForm.OuterNotebook.Hide;
      WizardForm.Bevel.Hide;
      SplashImage.Show;
    end;
    wpFinished:
    begin
      WizardForm.ProgressGauge.Hide;
      SplashImage.Hide;
      SplashImage.Free;
      WizardForm.OuterNotebook.Show;
      WizardForm.Bevel.Show;
    end;
  end;
end;
Ответить

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