Скрипты Inno Setup. Помощь и советы [часть 9]
-
Nordek
-
Beavimo
Re: Скрипты Inno Setup. Помощь и советы [часть 9]
Выручайте, башка кипит!
Как решить не пойму, примеров найти не могу? Некая программа работает на Виндовс 7 некорректно. Опытным путем
, после установки обновления KB2533623, программа начала работать как надо. Так вот в момент установки моего приложения, надо проверить установлено ли обновление KB2533623 в системе, или нет. Если установлено то просто установить приложение, в противном случае, спросить у пользователя, мол
хотите установить или нет? Как проверить наличие KB2533623 за что цеплятся? Короч насочинял чот но как быть с 32-бит системой, как запустить само обновление при нажатии "да" непойму.
Скрытый текст
[spoiler]Код: [/spoiler]
шуршу страницы в поисках истины, реально прогрес бар, ботва... короче дети засрали все со своими репаками
ПОМОГИТЕ
Как решить не пойму, примеров найти не могу? Некая программа работает на Виндовс 7 некорректно. Опытным путем
, после установки обновления KB2533623, программа начала работать как надо. Так вот в момент установки моего приложения, надо проверить установлено ли обновление KB2533623 в системе, или нет. Если установлено то просто установить приложение, в противном случае, спросить у пользователя, мол
хотите установить или нет? Как проверить наличие KB2533623 за что цеплятся? Короч насочинял чот но как быть с 32-бит системой, как запустить само обновление при нажатии "да" непойму.Скрытый текст
[spoiler]Код: [/spoiler]
Код: Выделить всё
[Setup]
AppName=TEST
AppVerName=TEST
OutputDir=userdocs:..\Desktop
CreateAppDir=no
Uninstallable=no
[.Code]
function WindowsVersion(Major, Minor: Integer): Boolean; var
Version: TWindowsVersion;
begin
GetWindowsVersionEx(Version);
Result:=(Version.Major = Major);
Result:=(Version.Minor = Minor);
end;
function WindowsRevVersion: Boolean;
begin
Result:=WindowsVersion(6,1);// Далее код будет выполнятся, только если установлена система (6.1)
end;
function InitializeSetup: Boolean; var
FileName: String;
begin
if not WindowsRevVersion then
Result:=True
else begin
FileName:=ExpandConstant('C:\Windows\SoftwareDistribution\Download\873dafaddab7475a4078c7fc97bc8cba\Windows6.1-KB2533623-x64.cab')// Проверка наличия файла по пути прописаном в реестре
if FileExists(FileName) then
Result:=True
else
if MsgBox('Для полноценной работы приложения TEST:'#13'Нужно установить обновление KB2533623:'#13'Хотите установить обновление KB2533623 ?', mbInformation, MB_YESNO)=IDNO then
Result:=True
else
// Как здесь запустить файл "Windows6.1-KB2533623-x64.msu"???
end
end;
[Files]
Source: "C:\Windows6.1-KB2533623-x64.msu"; DestDir: "{tmp}"; Flags: deleteafterinstall;шуршу страницы в поисках истины, реально прогрес бар, ботва... короче дети засрали все со своими репаками
ПОМОГИТЕ
-
Beavimo
Re: Скрипты Inno Setup. Помощь и советы [часть 9]
TheLeon, поле тип установки и так находится на 0 отметке WizardForm.TypesCombo.Top := ScaleY(0).
Цитата TheLeon:
не хочет устанавливать дополнения в program files и подобные директории.
в параметре DefaultDirName у вас указанно C:\Program Files (x86)\Spintires когда вместо C:\Program Files (x86) должна быть указана константа {pf} (подробнее читайте
замените
[spoiler]Compression=zip/9
InternalCompressLevel=ultra
CompressionThreads=2
SolidCompression=True[/spoiler]
на
[spoiler]Compression=lzma2/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
LZMADictionarySize=65536
LZMAMatchFinder=BT
LZMANumFastBytes=273
MergeDuplicateFiles=yes[/spoiler]
Цитата TheLeon:
не хочет устанавливать дополнения в program files и подобные директории.
Скрипты Inno Setup. Помощь и советы [часть 9]
в параметре DefaultDirName у вас указанно C:\Program Files (x86)\Spintires когда вместо C:\Program Files (x86) должна быть указана константа {pf} (подробнее читайте
справку
). Для наилучшего сжатия инсталлятора замените
[spoiler]Compression=zip/9
InternalCompressLevel=ultra
CompressionThreads=2
SolidCompression=True[/spoiler]
на
[spoiler]Compression=lzma2/Ultra64
SolidCompression=true
InternalCompressLevel=Ultra64
LZMADictionarySize=65536
LZMAMatchFinder=BT
LZMANumFastBytes=273
MergeDuplicateFiles=yes[/spoiler]
-
Gnom_aka_Lexander
Re: Скрипты Inno Setup. Помощь и советы [часть 9]
Старинный проект. Пришлось немного переписать, на win10 работать не хотел.
Поиск и закрытие определенного процесса. В теории, при запуске от имени админа, убивает даже системные процессы, поэтому использовать с осторожностью, имя процесса указывать максимально точно.
Поиск и закрытие определенного процесса. В теории, при запуске от имени админа, убивает даже системные процессы, поэтому использовать с осторожностью, имя процесса указывать максимально точно.
- Вложения
- Вложения
-
- IsProc2.zip
- (25.33 КБ) 0 скачиваний
- IsProc2.zip
- (25.33 КБ) 0 скачиваний
-
Beavimo
Re: Скрипты Inno Setup. Помощь и советы [часть 9]
Nordek, Я видел "532" пост, когда искал решение "удаление перед установкой" несколько раз.
Не понимая заданного вопроса "TROY Diamond" (Мне нужно, чтобы мой установщик при запуске находил уже ранее установленное приложение, НЕ только моим, НО и другими установщиками) - просто проходил мимо.
Теперь понял, спасибо за наводку
Но мне не то нужно, может есть возможность выполнить батник, или же конслольные команды после нажатия на финиш инсталлятора?
Банально мне нужно чтобы мой инсталятор само уничтожался после выполнения, как это делает unins000.exe...
Не понимая заданного вопроса "TROY Diamond" (Мне нужно, чтобы мой установщик при запуске находил уже ранее установленное приложение, НЕ только моим, НО и другими установщиками) - просто проходил мимо.
Теперь понял, спасибо за наводку

Но мне не то нужно, может есть возможность выполнить батник, или же конслольные команды после нажатия на финиш инсталлятора?
Банально мне нужно чтобы мой инсталятор само уничтожался после выполнения, как это делает unins000.exe...
-
Gnom_aka_Lexander
Re: Скрипты Inno Setup. Помощь и советы [часть 9]
Цитата TheLeon:
2. Как через bat открыть файл(.txt) и в конце дописать строчки(если они отсутствуют, если же нет, то ничего не делать):
Цитата TheLeon:
от имени администратора
вам
Цитата TheLeon:
1. Как сделать так, чтобы после установки запускался bat файл(в зависимости оттого какой ты компонент выбрал), скрытая установка(не высвечивалась командная строка)?
Если у вас не запускается батник добавьте
Flags: ShellExec;
для скрытой установки добавьте
Flags: RunHidden;
в зависимости от выбранного компонента добавьте
Components: имя компонента; к нужным строкам из раздела run. если вам нужно добавить несколько компонентов к одной строке, то добавляйте имя компонента через пробел Components: AFP\INSTALL\AX AFP\INSTALL\ALL;
2. Как через bat открыть файл(.txt) и в конце дописать строчки(если они отсутствуют, если же нет, то ничего не делать):
Скрипты Inno Setup. Помощь и советы [часть 9]
Цитата TheLeon:
от имени администратора
Скрипты Inno Setup. Помощь и советы [часть 9]
вам
сюда
Цитата TheLeon:
1. Как сделать так, чтобы после установки запускался bat файл(в зависимости оттого какой ты компонент выбрал), скрытая установка(не высвечивалась командная строка)?
Скрипты Inno Setup. Помощь и советы [часть 9]
Если у вас не запускается батник добавьте
Flags: ShellExec;
для скрытой установки добавьте
Flags: RunHidden;
в зависимости от выбранного компонента добавьте
Components: имя компонента; к нужным строкам из раздела run. если вам нужно добавить несколько компонентов к одной строке, то добавляйте имя компонента через пробел Components: AFP\INSTALL\AX AFP\INSTALL\ALL;
-
passstrada
Re: Скрипты Inno Setup. Помощь и советы [часть 9]
Цитата habib2302:
вам сюда
С чего бы это туда. Встроенный язык InnoSetup — это, как раз-таки, здесь. Никакие «bat'ы» здесь не нужны.
Я и это:
вам сюда
Скрипты Inno Setup. Помощь и советы [часть 9]
С чего бы это туда. Встроенный язык InnoSetup — это, как раз-таки, здесь. Никакие «bat'ы» здесь не нужны.
Я и это:
CMD/BAT - [решено] Замена строк в файле формата .xml
предлагал, чтобы сделали здесь же на том же самом встроенном Паскале.-
Log 101
Re: Скрипты Inno Setup. Помощь и советы [часть 9]
Цитата Iska:
Я и это: [решено] Замена строк в файле формата .xml предлагал, чтобы сделали здесь же на том же самом встроенном Паскале.
Iska, да легко:
Скрытый текст
[spoiler]Код: [/spoiler]
Я и это: [решено] Замена строк в файле формата .xml предлагал, чтобы сделали здесь же на том же самом встроенном Паскале.
Скрипты Inno Setup. Помощь и советы [часть 9]
Iska, да легко:
Скрытый текст
[spoiler]Код: [/spoiler]
Код: Выделить всё
[Code]
/////////////////////////////////////////////////
procedure VehiclesConfig(const FileName: string);
var
XMLDoc, XMLNodes, XMLNode: Variant;
XPath: string;
begin
try
XMLDoc := CreateOleObject('Msxml2.DOMDocument');
XMLDoc.setProperty('SelectionLanguage', 'XPath');
XMLDoc.async := False;
XMLDoc.load(FileName);
if XMLDoc.parseError.errorCode 0 then
RaiseException(string(XMLDoc.parseError.reason));
XMLNode := XMLDoc.createElement('MediaPath');
XMLNode.setAttribute('Path', 'Vehicles');
XPath := '/Config/MediaPath[@Path="Media" and not(following-sibling::*[1][self::MediaPath[@Path="Vehicles"]])]/following-sibling::*[1]';
#if (Ver < 0x5050600) ; avoid VarIsNull
XMLNodes := XMLDoc.selectNodes(XPath);
if XMLNodes.length = 1 then
XMLDoc.documentElement.insertBefore(XMLNode, XMLNodes.item(0));
#else
XMLNodes := XMLDoc.selectSingleNode(XPath);
if not VarIsClear(XMLNodes) then
XMLDoc.documentElement.insertBefore(XMLNode, XMLNodes);
#endif
XMLDoc.save(FileName);
except
ShowExceptionMessage;
finally
end;
end;
///////////////////////////
procedure InitializeWizard;
begin
VehiclesConfig('{#SourcePath}\example.xml');
end;
-
passstrada
Re: Скрипты Inno Setup. Помощь и советы [часть 9]
Здраствуйте. Помогите пож. объединить два кода.
К инсталятору добавил код фонового изображения используя isgsg.dll:
Скрытый текст
[spoiler][Setup]
SourceDir=.
OutputDir=Setup
AppName=My Program
AppVerName=1.0
AppVersion=1.0
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
DisableWelcomePage=false
DisableDirPage=false
DisableProgramGroupPage=false
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source: "Fon.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;
[UninstallDelete]
Type: filesandordirs; Name: "{app}"
[_Code]
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
procedure InitializeWizard;
begin
ssInitialize(GetWindowLong(MainForm.Handle,-8),0,False,1,$FF000000);
ExtractTemporaryFile('Fon.jpg');
ssSetBkgImage(ExpandConstant('{tmp}')+'\Fon.jpg');
end;
procedure DeinitializeSetup;
begin
ssDeInitialize;
end;[/spoiler]
На странице InstallingPage прописал код минимизации окна:
Скрытый текст
[spoiler][_Code]
var
ResizeButton: TButton;
PageResized, Show: Boolean;
function GetSystemMetrics(nIndex:Integer):integer;
external 'GetSystemMetrics@user32.dll stdcall delayload';
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): LongWord;
external 'GetSystemMenu@user32.dll stdcall';
function DeleteMenu(hMenu: LongWord; uPosition, uFlags: UINT): BOOL;
external 'DeleteMenu@user32.dll stdcall';
procedure MinimizeInstallPage();
begin
WizardForm.MainPanel.Hide;
WizardForm.Bevel1.Hide;
WizardForm.Width:= ScaleX(395);
WizardForm.Height:= ScaleY(142);
WizardForm.Left:= GetSystemMetrics(16)-ScaleX(420);
WizardForm.Top:= GetSystemMetrics(17)-ScaleX(150);
WizardForm.InnerNotebook.Left:= ScaleX(10);
WizardForm.InnerNotebook.Top:= ScaleY(10);
WizardForm.InnerNotebook.Width:= ScaleX(370);
WizardForm.StatusLabel.Left:= ScaleX(0);
WizardForm.StatusLabel.Top:= ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:= ScaleX(0);
WizardForm.FileNameLabel.Top:= ScaleY(20);
WizardForm.FileNameLabel.Width:= WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:= ScaleY(40);
WizardForm.ProgressGauge.Width:= WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:= ScaleX(220);
WizardForm.CancelButton.Top:= ScaleY(80);
WizardForm.CancelButton.BringToFront;
ResizeButton.Left:= ScaleX(60);
ResizeButton.Top:= ScaleY(80);
ResizeButton.Caption:= 'Max.';
PageResized:= True;
end;
procedure ResumeInstallPage();
begin
WizardForm.Width:= ScaleX(503);
WizardForm.Height:= ScaleY(388);
WizardForm.Position:= poScreenCenter;
if Show then begin
WizardForm.MainPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(58));
WizardForm.MainPanel.Show;
WizardForm.Bevel1.Show;
end;
WizardForm.InnerNotebook.SetBounds(ScaleX(40), ScaleY(72), ScaleX(417), ScaleY(237));
WizardForm.StatusLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(16));
WizardForm.FilenameLabel.SetBounds(ScaleX(0), ScaleY(16), ScaleX(417), ScaleY(16));
WizardForm.ProgressGauge.SetBounds(ScaleX(0), ScaleY(42), ScaleX(417), ScaleY(21));
WizardForm.CancelButton.SetBounds(ScaleX(412), ScaleY(327), ScaleX(75), ScaleY(23));
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.Caption:= 'Min.';
PageResized:= False;
end;
procedure ResizeButtonOnClick(Sender: TObject);
begin
If PageResized then
ResumeInstallPage
else
MinimizeInstallPage;
end;
procedure InitializeWizard();
begin
ResizeButton:= TButton.Create(WizardForm);
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.OnClick:= @ResizeButtonOnClick;
ResizeButton.Caption:= 'Min.';
ResizeButton.Hide;
ResizeButton.Parent:= WizardForm;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
ResizeButton.Hide;
case CurPageID of
wpInstalling:
begin
Show:= true;
ResizeButton.Show;
end;
wpFinished:
begin
Show:= false;
ResumeInstallPage;
DeleteMenu(GetSystemMenu(WizardForm.Handle,False),$F060,0);
end;
end;
end;
procedure BtnDisable();
begin
ResizeButton.Enabled := False;
end;[/spoiler]
Необходимо выполнить следующее:
1. При клике на кнопку "Min" фоновое изображение закрывается
2. При клике на кнопку "Max" фоновое изображение отображается
К инсталятору добавил код фонового изображения используя isgsg.dll:
Скрытый текст
[spoiler][Setup]
SourceDir=.
OutputDir=Setup
AppName=My Program
AppVerName=1.0
AppVersion=1.0
DefaultDirName={pf}\My Program
DefaultGroupName=My Program
DisableWelcomePage=false
DisableDirPage=false
DisableProgramGroupPage=false
[Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
[Files]
Source: "Fon.jpg"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: "isgsg.dll"; DestDir: {tmp}; Flags: ignoreversion dontcopy nocompression
Source: {win}\help\*; DestDir: {app}\Files; Flags: external recursesubdirs createallsubdirs;
[UninstallDelete]
Type: filesandordirs; Name: "{app}"
[_Code]
function GetWindowLong(hWnd: HWND; nIndex: Integer): Longint; external 'GetWindowLongA@user32.dll stdcall delayload';
function ssInitialize(hParent:HWND;ssTimeShow:integer;FadeOut:boolean;StretchMode:integer;BkgColor:DWORD):boo lean; external 'ssInitialize@files:isgsg.dll stdcall delayload';
procedure ssDeInitialize; external 'ssDeInitialize@files:isgsg.dll stdcall delayload';
procedure ssSetBkgImage(FileName:PChar); external 'ssSetBkgImage@files:isgsg.dll stdcall delayload';
procedure InitializeWizard;
begin
ssInitialize(GetWindowLong(MainForm.Handle,-8),0,False,1,$FF000000);
ExtractTemporaryFile('Fon.jpg');
ssSetBkgImage(ExpandConstant('{tmp}')+'\Fon.jpg');
end;
procedure DeinitializeSetup;
begin
ssDeInitialize;
end;[/spoiler]
На странице InstallingPage прописал код минимизации окна:
Скрытый текст
[spoiler][_Code]
var
ResizeButton: TButton;
PageResized, Show: Boolean;
function GetSystemMetrics(nIndex:Integer):integer;
external 'GetSystemMetrics@user32.dll stdcall delayload';
function GetSystemMenu(hWnd: HWND; bRevert: BOOL): LongWord;
external 'GetSystemMenu@user32.dll stdcall';
function DeleteMenu(hMenu: LongWord; uPosition, uFlags: UINT): BOOL;
external 'DeleteMenu@user32.dll stdcall';
procedure MinimizeInstallPage();
begin
WizardForm.MainPanel.Hide;
WizardForm.Bevel1.Hide;
WizardForm.Width:= ScaleX(395);
WizardForm.Height:= ScaleY(142);
WizardForm.Left:= GetSystemMetrics(16)-ScaleX(420);
WizardForm.Top:= GetSystemMetrics(17)-ScaleX(150);
WizardForm.InnerNotebook.Left:= ScaleX(10);
WizardForm.InnerNotebook.Top:= ScaleY(10);
WizardForm.InnerNotebook.Width:= ScaleX(370);
WizardForm.StatusLabel.Left:= ScaleX(0);
WizardForm.StatusLabel.Top:= ScaleY(0);
WizardForm.StatusLabel.Width:=WizardForm.InnerNotebook.Width;
WizardForm.FileNameLabel.Left:= ScaleX(0);
WizardForm.FileNameLabel.Top:= ScaleY(20);
WizardForm.FileNameLabel.Width:= WizardForm.InnerNotebook.Width;
WizardForm.ProgressGauge.Top:= ScaleY(40);
WizardForm.ProgressGauge.Width:= WizardForm.InnerNotebook.Width;
WizardForm.CancelButton.Left:= ScaleX(220);
WizardForm.CancelButton.Top:= ScaleY(80);
WizardForm.CancelButton.BringToFront;
ResizeButton.Left:= ScaleX(60);
ResizeButton.Top:= ScaleY(80);
ResizeButton.Caption:= 'Max.';
PageResized:= True;
end;
procedure ResumeInstallPage();
begin
WizardForm.Width:= ScaleX(503);
WizardForm.Height:= ScaleY(388);
WizardForm.Position:= poScreenCenter;
if Show then begin
WizardForm.MainPanel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(497), ScaleY(58));
WizardForm.MainPanel.Show;
WizardForm.Bevel1.Show;
end;
WizardForm.InnerNotebook.SetBounds(ScaleX(40), ScaleY(72), ScaleX(417), ScaleY(237));
WizardForm.StatusLabel.SetBounds(ScaleX(0), ScaleY(0), ScaleX(417), ScaleY(16));
WizardForm.FilenameLabel.SetBounds(ScaleX(0), ScaleY(16), ScaleX(417), ScaleY(16));
WizardForm.ProgressGauge.SetBounds(ScaleX(0), ScaleY(42), ScaleX(417), ScaleY(21));
WizardForm.CancelButton.SetBounds(ScaleX(412), ScaleY(327), ScaleX(75), ScaleY(23));
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.Caption:= 'Min.';
PageResized:= False;
end;
procedure ResizeButtonOnClick(Sender: TObject);
begin
If PageResized then
ResumeInstallPage
else
MinimizeInstallPage;
end;
procedure InitializeWizard();
begin
ResizeButton:= TButton.Create(WizardForm);
ResizeButton.SetBounds(ScaleX(20), ScaleY(327),ScaleX(75), ScaleY(23));
ResizeButton.OnClick:= @ResizeButtonOnClick;
ResizeButton.Caption:= 'Min.';
ResizeButton.Hide;
ResizeButton.Parent:= WizardForm;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
ResizeButton.Hide;
case CurPageID of
wpInstalling:
begin
Show:= true;
ResizeButton.Show;
end;
wpFinished:
begin
Show:= false;
ResumeInstallPage;
DeleteMenu(GetSystemMenu(WizardForm.Handle,False),$F060,0);
end;
end;
end;
procedure BtnDisable();
begin
ResizeButton.Enabled := False;
end;[/spoiler]
Необходимо выполнить следующее:
1. При клике на кнопку "Min" фоновое изображение закрывается
2. При клике на кнопку "Max" фоновое изображение отображается
-
Earlex
Re: Скрипты Inno Setup. Помощь и советы [часть 9]
Цитата ROMKA-1977:
Необходимо выполнить следующее:
1. При клике на кнопку "Min" фоновое изображение закрывается
2. При клике на кнопку "Max" фоновое изображение отображается
ROMKA-1977, в секцию Setup добавить WindowVisible=yes и WindowShowCaption=no, в процедуре ResizeButtonOnClick в конце дописать MainForm.Visible := not PageResized;
Необходимо выполнить следующее:
1. При клике на кнопку "Min" фоновое изображение закрывается
2. При клике на кнопку "Max" фоновое изображение отображается
Скрипты Inno Setup. Помощь и советы [часть 9]
ROMKA-1977, в секцию Setup добавить WindowVisible=yes и WindowShowCaption=no, в процедуре ResizeButtonOnClick в конце дописать MainForm.Visible := not PageResized;