Скрипты Inno Setup. Помощь и советы [часть 6]
-
elmariacci
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
люди помогите мне.я делаю русификатор.как сделать так,чтобы инсталятор сам определил где в какой папке находтся программа?
-
ilya_klimovich
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
habib2302,
Указываете в качестве DefaultDirName ключ реестра, содержащий информацию о рабочей папки программы.
Код:
Указываете в качестве DefaultDirName ключ реестра, содержащий информацию о рабочей папки программы.
Код:
Код: Выделить всё
DefaultDirName={reg:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1,InstallLocation|{pf}\My Program}-
nik1967
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
habib2302,
Вариант1
[Setup]
AppName=My Program
AppVerName=My Program 1.5
DefaultDirName={code:GetInstallDir}
AppendDefaultDirName=no
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
читать дальше »
Вариант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
-
ilya_klimovich
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
Спасибо всем за помощь.
Цитата saurn:
страничка с двумя эдитами - кастомная страница, создавать нужно в секции
И то папка по умолчанию не ставится и не знаю как добавить ниже текст и эдитам.
Подскажите еще где нужно исправить в скрипте, что бы программа перед установкой определяла установлена ли программа (AviSynth) или нет. Если не установлена, то запускала установку.
Цитата 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]
Подскажите как сделать эти два файла скрытыми
Код:
Код:
Код: Выделить всё
[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]
insombia
NFS Most Wanted
audiofeel
может вы и правы, но все таки?) извиняюсь за настойчивость)
NFS Most Wanted
audiofeel
может вы и правы, но все таки?) извиняюсь за настойчивость)
-
ilya_klimovich
Re: Скрипты Inno Setup. Помощь и советы [часть 6]
Цитата 41275jur:
И то папка по умолчанию не ставится и не знаю как добавить ниже текст и эдитам.
Подскажите еще где нужно исправить в скрипте, что бы программа перед установкой определяла установлена ли программа (AviSynth) или нет. Если не установлена, то запускала установку.
Код:
Цитата 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]
Цитата 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: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]
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;