Это реально Узнать путь из реестра, определить MD5 если такойто МД5 то такоето действее и т. д. Я только этого не умею, не знаю тот язык, а так бы помог
» Inno Setup (создание инсталяционных пакетов)
При использовании NSIS_SkinCrafter и скинов не отображается список компонентов и дополнительных задач, но они становятся видны при клике мышью по кнопкам назад или далее, а также по самии компонентам. Можно ли это как-то исправить. Заранее благодарю. Код брал из коллекции скриптов. Вот он:
[more]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
OutputDir=.
[Files]
Source: callnsis.dll; Flags: dontcopy
[Code]
var
Button: TButton;
Skins: TStringList;
i: integer;
procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PChar);
external 'callplug@files:callnsis.dll stdcall';
procedure GetSkins();
var
FindRec: TFindRec;
begin
if FindFirst(ExpandConstant('{src}\skin\*.skf'), FindRec) then begin
try
repeat
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
Skins.Add(FindRec.Name);
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;
end;
procedure ButtonOnClick(Sender: TObject);
begin
if i = Skins.Count - 1 then i:= 0
else i:= i+1;
callplug(0, ExpandConstant('{src}\skin\NSIS_SkinCrafter_Plugin.dll'),'skin',ExpandConstant('{src}\skin\' + Skins[i]),'','','','','','','','','');
Button.Caption := Skins[i];
end;
procedure InitializeWizard();
begin
Skins:= TStringList.Create;
GetSkins();
Button := TButton.Create(WizardForm);
Button.Left := 10;
Button.Top := WizardForm.CancelButton.Top;
Button.Width := WizardForm.CancelButton.Width + 30;
Button.Height := WizardForm.CancelButton.Height;
Button.Caption := Skins[0];
Button.OnClick := @ButtonOnClick;
Button.Parent := WizardForm;
WizardForm.Position:=poDesktopCenter
// WizardForm.Height:=WizardForm.Height-40
callplug(0, ExpandConstant('{src}\skin\NSIS_SkinCrafter_Plugin.dll'),'skin',ExpandConstant('{src}\skin\' + Skins[0]),'','','','','','','','','');
end;
[/more]
[more]
[Setup]
AppName=My Program
AppVerName=My Program v.1.2
DefaultDirName={pf}\My Program
OutputDir=.
[Files]
Source: callnsis.dll; Flags: dontcopy
[Code]
var
Button: TButton;
Skins: TStringList;
i: integer;
procedure callplug(parentwnd: Integer; pluginname,funcname,param1,param2,param3,param4,param5,param6,param7,param8,param9,param10: PChar);
external 'callplug@files:callnsis.dll stdcall';
procedure GetSkins();
var
FindRec: TFindRec;
begin
if FindFirst(ExpandConstant('{src}\skin\*.skf'), FindRec) then begin
try
repeat
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY = 0 then
begin
Skins.Add(FindRec.Name);
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end;
end;
procedure ButtonOnClick(Sender: TObject);
begin
if i = Skins.Count - 1 then i:= 0
else i:= i+1;
callplug(0, ExpandConstant('{src}\skin\NSIS_SkinCrafter_Plugin.dll'),'skin',ExpandConstant('{src}\skin\' + Skins[i]),'','','','','','','','','');
Button.Caption := Skins[i];
end;
procedure InitializeWizard();
begin
Skins:= TStringList.Create;
GetSkins();
Button := TButton.Create(WizardForm);
Button.Left := 10;
Button.Top := WizardForm.CancelButton.Top;
Button.Width := WizardForm.CancelButton.Width + 30;
Button.Height := WizardForm.CancelButton.Height;
Button.Caption := Skins[0];
Button.OnClick := @ButtonOnClick;
Button.Parent := WizardForm;
WizardForm.Position:=poDesktopCenter
// WizardForm.Height:=WizardForm.Height-40
callplug(0, ExpandConstant('{src}\skin\NSIS_SkinCrafter_Plugin.dll'),'skin',ExpandConstant('{src}\skin\' + Skins[0]),'','','','','','','','','');
end;
[/more]
Какой флаг поставить чтобы компилятор не выводил сообщение "No files matching ..." если задано
Source: F:\INSTALL\FILES\WORK\*; DestDir: {app}; Flags: ignoreversion overwritereadonly recursesubdirs createallsubdirs
и папка WORK\ пустая, мне надо чтобы и пустые папки создавались при установке.
Добавлено:
.
Source: F:\INSTALL\FILES\WORK\*; DestDir: {app}; Flags: ignoreversion overwritereadonly recursesubdirs createallsubdirs
и папка WORK\ пустая, мне надо чтобы и пустые папки создавались при установке.
Добавлено:
.
Попробуй это:
Source: F:\INSTALL\FILES\WORK\*; DestDir: {app}; Flags: overwritereadonly recursesubdirs createallsubdirs
Source: F:\INSTALL\FILES\WORK\*; DestDir: {app}; Flags: overwritereadonly recursesubdirs createallsubdirs
Да это же то самое что и у меня почти...не работает
Sergey_Demchuk
Цитата:
Вроде бы так:
Source: F:\INSTALL\FILES\WORK\*; DestDir: {app}; Flags: ignoreversion createallsubdirs recursesubdirs sortfilesbyextension
Цитата:
Какой флаг поставить чтобы компилятор не выводил сообщение "No files matching ..." если задано
Source: F:\INSTALL\FILES\WORK\*; DestDir: {app}; Flags: ignoreversion overwritereadonly recursesubdirs createallsubdirs
и папка WORK\ пустая, мне надо чтобы и пустые папки создавались при установке.
Вроде бы так:
Source: F:\INSTALL\FILES\WORK\*; DestDir: {app}; Flags: ignoreversion createallsubdirs recursesubdirs sortfilesbyextension
Sergey_Demchuk,
Код: [Dirs]
Name: "{app}\WORK"
Код: [Dirs]
Name: "{app}\WORK"
Artem_Butenko
Цитата:
[more=Ну типа того]
[Setup]
AppName=GetMD5OfFile
AppVerName=GetMD5OfFile v 1.0
DefaultDirName={code:GetRegDir}
OutputDir=.
[Files]
Source: "compiler:Examples\MyProg.exe"; Flags: dontcopy;
Source: "compiler:Examples\MyProg-x64.exe"; Flags: dontcopy;
[Code]
function GetRegDir(Dir: string): string;
begin
Dir := '';
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Prog_is1','InstallLocation', Dir);
Result := Dir;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
s: string;
begin
if CurStep = ssInstall then
begin
if FileExists(ExpandConstant('{code:GetRegDir}\MyProg.exe')) then
begin
s := GetMD5OfFile(ExpandConstant('{code:GetRegDir}\MyProg.exe'));
begin
if s = '04ef9893ce03925182188a88b7923bc0' then
begin
ExtractTemporaryFile('MyProg.exe');
FileCopy(ExpandConstant('{tmp}\MyProg.exe'), ExpandConstant('{app}\MyProg_copy.exe'), True);
end;
end;
end;
if FileExists(ExpandConstant('{code:GetRegDir}\MyProg-x64.exe')) then
begin
s := GetMD5OfFile(ExpandConstant('{code:GetRegDir}\MyProg-x64.exe'));
begin
if s = '909ebdbc1a9e0bdd99c20a1428402150' then
begin
ExtractTemporaryFile('MyProg-x64.exe');
FileCopy(ExpandConstant('{tmp}\MyProg-x64.exe'), ExpandConstant('{app}\MyProg-x64_copy.exe'), True);
end;
end;
end;
end;
end;
[/more]
Ну или может проще как-то можно ...
Цитата:
Если коротко, то при одном значении md5 и размера исходного файла (в каталоге назначения) должна быть скопирована одна группа файлов, а при другом значении md5 и размера того же файла (с тем же именем), другая группа файлов.
[more=Ну типа того]
[Setup]
AppName=GetMD5OfFile
AppVerName=GetMD5OfFile v 1.0
DefaultDirName={code:GetRegDir}
OutputDir=.
[Files]
Source: "compiler:Examples\MyProg.exe"; Flags: dontcopy;
Source: "compiler:Examples\MyProg-x64.exe"; Flags: dontcopy;
[Code]
function GetRegDir(Dir: string): string;
begin
Dir := '';
RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Prog_is1','InstallLocation', Dir);
Result := Dir;
end;
procedure CurStepChanged(CurStep: TSetupStep);
var
s: string;
begin
if CurStep = ssInstall then
begin
if FileExists(ExpandConstant('{code:GetRegDir}\MyProg.exe')) then
begin
s := GetMD5OfFile(ExpandConstant('{code:GetRegDir}\MyProg.exe'));
begin
if s = '04ef9893ce03925182188a88b7923bc0' then
begin
ExtractTemporaryFile('MyProg.exe');
FileCopy(ExpandConstant('{tmp}\MyProg.exe'), ExpandConstant('{app}\MyProg_copy.exe'), True);
end;
end;
end;
if FileExists(ExpandConstant('{code:GetRegDir}\MyProg-x64.exe')) then
begin
s := GetMD5OfFile(ExpandConstant('{code:GetRegDir}\MyProg-x64.exe'));
begin
if s = '909ebdbc1a9e0bdd99c20a1428402150' then
begin
ExtractTemporaryFile('MyProg-x64.exe');
FileCopy(ExpandConstant('{tmp}\MyProg-x64.exe'), ExpandConstant('{app}\MyProg-x64_copy.exe'), True);
end;
end;
end;
end;
end;
[/more]
Ну или может проще как-то можно ...
Qarma
Не проходит, то же самое
Добавлено:
Unc1e
Это код писать дополнительно что ли?
Не проходит, то же самое
Добавлено:
Unc1e
Это код писать дополнительно что ли?
Sergey_Demchuk, да, просто допиши, например, после секции [Files]. [Dirs] - это одна из секций скрипта, занимающаяся созданием папок. В справке подробнее.
А кто нить может ответить на мой вопрос с предыдущей страницы?
Еще вопрос, кто нибудь может кинуть пример или ссылку на пример где происходит только замена определенных файлов, необходимо для создания обновления софта. Сейчас ищу с самого начала (с первой страницы) и на ум приходит сделать так:
создаем доп. вид инсталяции - "Обновление". А дальше подсовываем необходимые компоненты, но этот вариант неподходит так как нельзя указать конкретные файлы, а один компонент может быть большой((( Создание отдельного компонента только для обновления ситаю нерациональным... Есть еще варианты, а то поиск может затянуть?(((
Еще вопрос, кто нибудь может кинуть пример или ссылку на пример где происходит только замена определенных файлов, необходимо для создания обновления софта. Сейчас ищу с самого начала (с первой страницы) и на ум приходит сделать так:
создаем доп. вид инсталяции - "Обновление". А дальше подсовываем необходимые компоненты, но этот вариант неподходит так как нельзя указать конкретные файлы, а один компонент может быть большой((( Создание отдельного компонента только для обновления ситаю нерациональным... Есть еще варианты, а то поиск может затянуть?(((
Други, помогите с ЭТИМ.
Ребята, у кого-нибуду получалось сделать абсолютно "тихий" инсталл, особенно защитить его от комбинации Alt + F4?
Товорищи подскажите пожалуйста как сделать установку Фрэймворка без участия пользователя т.е. фоновой
Цитата:
Если делать так то просто идет извлечение из CAB архива а сама установка идет уже при участии пользователя
P.S. извеняюсь если не понятно описал суть проблемы!
Добавлено:
И еще столкнулся с одной проблемой в ходе работы можно ли тут же в этой секции повесить две проверки(Check) т.е.
Цитата:
где InstallDop это установка Фреймворка
not IsWin64 это проверка на битность Винды
Цитата:
Filename: "{src}\Framework\dotnetfx.exe.exe";Parameters:/q;
Если делать так то просто идет извлечение из CAB архива а сама установка идет уже при участии пользователя
P.S. извеняюсь если не понятно описал суть проблемы!
Добавлено:
И еще столкнулся с одной проблемой в ходе работы можно ли тут же в этой секции повесить две проверки(Check) т.е.
Цитата:
Filename: "{src}\Framework\dotnetfx.exe.exe";Parameters:/q;Check:InstallDop not IsWin64
где InstallDop это установка Фреймворка
not IsWin64 это проверка на битность Винды
Цитата:
да, просто допиши, например, после секции [Files]. [Dirs] - это одна из секций скрипта, занимающаяся созданием папок. В справке подробнее.
А если папок много...писать то долго тогда придется
интересует код при котором установка возможна только на Vista x86 и выше (win7 x86) x64 не надо, с соответствующий MsgBox где x64 и всякие XP идут лесом... подскажите как проще сделать
skeptik_vdm
по второму вопросу Check: InstallDop and not IsWin64
по второму вопросу Check: InstallDop and not IsWin64
Фуф..так может кто нибудь написать или дать ссылку на то как можно установить только определенные файлы, а остальное не трогать? То есть мы добавили папку с файлами и если выбран режим обновления то установить только 2 файла из этих всех.
Передлай под себя..
Цитата:
В 32битном режиме установки правильней будет так:
Код: [Files]
Source: "My.dll"; DestDir: "{app}"; Check: IsWin64;
Source: "My.dll"; DestDir: "{app}"; Check: not IsWin64;
(ИМХО)
Если софт 64битный, то
[Setup]
ArchitecturesInstallIn64BitMode=x64 x86
(тоже ИМХО)
Передлай под себя..
Цитата:
Здравствуйте, как сделать, чтоб в зависимости от версии windows 32 или 64 битной, устанавливалась та или другая .dll?
В 32битном режиме установки правильней будет так:
Код: [Files]
Source: "My.dll"; DestDir: "{app}"; Check: IsWin64;
Source: "My.dll"; DestDir: "{app}"; Check: not IsWin64;
(ИМХО)
Если софт 64битный, то
[Setup]
ArchitecturesInstallIn64BitMode=x64 x86
(тоже ИМХО)
Возможно ли реализовать вручную через [Code] корректную (без всяких KillProcess и т.д.) функцию отката, или хотя-бы прерывание установки. Функция Abort в процедуре CurStepChanged не работает.
procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep=ssPostInstall) then
begin
if (FileExists(AddBackslash(ExpandConstant('{tmp}')) + 'Precomp.exe')) and (FileExists(AddBackslash(ExpandConstant('{app}')) + 'zips\textures.pcf')) then
begin
Exec(AddBackslash(ExpandConstant('{tmp}')) + 'Precomp.exe', '-o' + AddQuotes(AddBackslash(ExpandConstant('{app}')) + 'zips\textures.zip') + #32 + '-r' + #32 + AddQuotes(AddBackslash(ExpandConstant('{app}')) + 'zips\textures.pcf'), ExtractFilePath(AddBackslash(ExpandConstant('{tmp}')) + 'Precomp.exe'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
end else begin
MsgBox('Исполняемый файл:' + #13#10#13#10 + (AddBackslash(ExpandConstant('{tmp}')) + 'Precomp.exe') + #13#10#13#10 + 'не найден. Установка отменена', mbCriticalError, MB_OK);
//-----------------------------------------------
// Здесь нужно сделать откат установки или Abort;
//-----------------------------------------------
end
end
end;
procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep=ssPostInstall) then
begin
if (FileExists(AddBackslash(ExpandConstant('{tmp}')) + 'Precomp.exe')) and (FileExists(AddBackslash(ExpandConstant('{app}')) + 'zips\textures.pcf')) then
begin
Exec(AddBackslash(ExpandConstant('{tmp}')) + 'Precomp.exe', '-o' + AddQuotes(AddBackslash(ExpandConstant('{app}')) + 'zips\textures.zip') + #32 + '-r' + #32 + AddQuotes(AddBackslash(ExpandConstant('{app}')) + 'zips\textures.pcf'), ExtractFilePath(AddBackslash(ExpandConstant('{tmp}')) + 'Precomp.exe'), SW_SHOW, ewWaitUntilTerminated, ResultCode);
end else begin
MsgBox('Исполняемый файл:' + #13#10#13#10 + (AddBackslash(ExpandConstant('{tmp}')) + 'Precomp.exe') + #13#10#13#10 + 'не найден. Установка отменена', mbCriticalError, MB_OK);
//-----------------------------------------------
// Здесь нужно сделать откат установки или Abort;
//-----------------------------------------------
end
end
end;
Snake193
Я так понимаю то умеешь использовать precomp????
Я так понимаю то умеешь использовать precomp????
Snake193, Ссылка
Цитата:
интересует код при котором установка возможна только на Vista x86 и выше (win7 x86) x64 не надо, с соответствующий MsgBox где x64 и всякие XP идут лесом... подскажите как проще сделать
самый простой способ:
Код:
[Setup]
MinVersion=0,6.0.6000
Snake193, после установки откат невозможен... как-то спрашивали, такой же вопрос, единственное, что придумал - это деинсталляция автоматом сразу после установки, если условие не выполнено... [more=пример]
Код: [Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
[Code]
function NextButtonClick(CurPage: Integer): Boolean;
var
ResultCode: Integer;
begin
Result:=True;
if CurPage=14 then
If (FileSearch('Program.exe', ExpandConstant('{pf}'))='') then
Exec(ExpandConstant('{uninstallexe}'), '/verysilent', ExpandConstant('{app}'), SW_HIDE, ewNoWait, ResultCode);
end;
Код: [Setup]
AppName=My Program
AppVerName=My Program version 1.5
DefaultDirName={pf}\My Program
[Code]
function NextButtonClick(CurPage: Integer): Boolean;
var
ResultCode: Integer;
begin
Result:=True;
if CurPage=14 then
If (FileSearch('Program.exe', ExpandConstant('{pf}'))='') then
Exec(ExpandConstant('{uninstallexe}'), '/verysilent', ExpandConstant('{app}'), SW_HIDE, ewNoWait, ResultCode);
end;
Может кто нибудь поможет как пользоваться precomp-ом????
Неужели я спрашиваю что то заоблачное? Или никто не знает?
skeptik_vdm
Создай текстовый документ в нем напиши precomp.exe -slow "имя файла".расширение файла сохрани с названием precomp в расширение bat (это для компилирования)
И для обратно действия поставь параметр precomp.exe -r "имя файла".pcf
Создай текстовый документ в нем напиши precomp.exe -slow "имя файла".расширение файла сохрани с названием precomp в расширение bat (это для компилирования)
И для обратно действия поставь параметр precomp.exe -r "имя файла".pcf
Всем доброго времени суток, этот форум очень помог мне, но щас пишу на Inno апдейтер для одной софтины, и у меня в задачу входит из инно подключиться к sql серверу и выцепить некоторые записи из таблиц, для их дальнейшего использования в коде.
Возможно ли это сделать в инновском паскале, если да, то можно глянуть пример или что-нибудь подобное, заранее благодарен.
По причине огромного количества страниц, не смог найти задавался ли уже такой вопрос, извините если продублировал.
UPD
На гуглил Лекспу, но она платная, поюзал примеры из справки, базу создать на сервере получилось, значит процесс пошёл, далее наверное разберусь.
Но если у кого то есть примеры использования данных со скуля в инсталяторе, буду рад
Возможно ли это сделать в инновском паскале, если да, то можно глянуть пример или что-нибудь подобное, заранее благодарен.
По причине огромного количества страниц, не смог найти задавался ли уже такой вопрос, извините если продублировал.
UPD
На гуглил Лекспу, но она платная, поюзал примеры из справки, базу создать на сервере получилось, значит процесс пошёл, далее наверное разберусь.
Но если у кого то есть примеры использования данных со скуля в инсталяторе, буду рад
WinstAn70
Он вообще жмет или нет вот картинку jpg он сжимает а можно им еще че нить посжимать допустим архивы???
Он вообще жмет или нет вот картинку jpg он сжимает а можно им еще че нить посжимать допустим архивы???
skeptik_vdm
Прекомп я запускал со следующими параметрами:
precomp -o"textures.pcf" -brute "textures.zip"
обратно:
precomp.exe -o"textures.zip" -r "textures.pcf"
в папке с precomp должны быть zlib1.dll и packjpg_dll.dll. Версия Precomp 0.3.8/
Прекомп я запускал со следующими параметрами:
precomp -o"textures.pcf" -brute "textures.zip"
обратно:
precomp.exe -o"textures.zip" -r "textures.pcf"
в папке с precomp должны быть zlib1.dll и packjpg_dll.dll. Версия Precomp 0.3.8/
Snake193
Можно и так каждый делает по разному! Может поможешь сделать Прогресс Бар бля архивов FreArc.
skeptik_vdm
Он наверное не жмет а как бы облегчает файл для последующего сжатия!
Можно и так каждый делает по разному! Может поможешь сделать Прогресс Бар бля архивов FreArc.
skeptik_vdm
Он наверное не жмет а как бы облегчает файл для последующего сжатия!
Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
Предыдущая тема: в очередной раз босудим антивиры?
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.