|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 9] |
|
Скрипты Inno Setup. Помощь и советы [часть 9]
|
Ветеран Сообщения: 1269 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов!
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Показать/скрыть: Справка, руководство, примеры:
Показать/скрыть: Ссылки на примеры скриптов:
Показать/скрыть: Дополнительные программы для Inno Setup:
Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Скрипты Inno Setup. Помощь и советы [часть 6] | Скрипты Inno Setup. Помощь и советы [часть 6].7z Скрипты Inno Setup. Помощь и советы [часть 7] | Скрипты Inno Setup. Помощь и советы [часть 7].7z Скрипты Inno Setup. Помощь и советы [часть 8] | Скрипты Inno Setup. Помощь и советы [часть 8].7z |
|
Отправлено: 16:09, 04-04-2018 |
Старожил Сообщения: 291
|
Профиль | Отправить PM | Цитировать Цитата habib2302:
|
|
------- Последний раз редактировалось ZVSRus, 20-10-2020 в 09:17. Отправлено: 09:05, 20-10-2020 | #701 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 861
|
Профиль | Отправить PM | Цитировать ZVSRus, Пробовал этот метод, но не работает. Может вы поможете соединить мой скрипт с вашим примером
|
------- Отправлено: 12:13, 20-10-2020 | #702 |
Старожил Сообщения: 291
|
Профиль | Отправить PM | Цитировать Цитата habib2302:
|
|
------- Отправлено: 12:31, 20-10-2020 | #703 |
Ветеран Сообщения: 861
|
Профиль | Отправить PM | Цитировать Цитата ZVSRus:
|
|
------- Отправлено: 12:51, 20-10-2020 | #704 |
Старожил Сообщения: 291
|
Профиль | Отправить PM | Цитировать Цитата habib2302:
|
|
------- Отправлено: 13:12, 20-10-2020 | #705 |
Ветеран Сообщения: 861
|
Профиль | Отправить PM | Цитировать ZVSRus, Посмотрите, правильно ли сделал?
Скрытый текст
#define AppName "Axialis IconWorkshop" #define AppVersion "6.9.1" #include "include\botva2.iss" [Setup] AppName={#AppName} AppVerName={#AppName} {#AppVersion} AppId={#AppName} AppVersion={#AppVersion} AppCopyright=Xabib © 2020 AppPublisher=Axialis Software AllowNoIcons=yes DefaultDirName={code:GetDefaultDirName}\{#AppName} DefaultGroupName={#AppName} DisableWelcomePage=yes DisableReadyPage=yes DisableFinishedPage=yes DirExistsWarning=no PrivilegesRequiredOverridesAllowed=dialog SetupIconFile=Install.ico UninstallDisplayIcon={app}\IconWorkshop.exe UninstallDisplayName={#AppName} {#AppVersion} OutputBaseFilename={#AppName} {#AppVersion} RePack (& Portable) by Xabib VersionInfoDescription={#AppName} RePack by Xabib VersionInfoVersion={#AppVersion} Compression=lzma2/ultra64 SolidCompression=true InternalCompressLevel=ultra64 LZMADictionarySize=65536 LZMAMatchFinder=BT LZMANumFastBytes=273 Uninstallable=not IsInPortableMode UsePreviousAppDir=no CreateUninstallRegKey=not IsInPortableMode RawDataResource=Botva>botva2.dll,WMSI>WMSI.png [Languages] Name: enu; MessagesFile: compiler:default.isl Name: rus; MessagesFile: compiler:Languages\russian.isl [Messages] BeveledLabel=RePack by Xabib SelectLanguageTitle={#AppName} [CustomMessages] enu.CreateConfigShowOptions=Show options window (when finishing install) enu.CreateDefaultConfig=Create default configuration enu.ForbiddenDirMessage=In portable mode, %1 should not be installed in "Program Files" or similar system directories. enu.InstallModePageCaption=Pick Installation Mode enu.InstallModePageDescription=Do you prefer integration into Windows or a portable installation? enu.InstallModePageNormalOption=Normal - Integrates into Windows enu.InstallModePagePortableOption=Portable - Supports removeable drives (e.g., USB pen drives) enu.InstallModePageSubCaption=Choose a normal installation that integrates into Windows (e.g., Startmenu, optional Explorer context menu), or a portable installation that can run on any compatible Windows machine. enu.LanguageFilesComponent=Languages enu.OpenInstallFolderAfterInstall=Open installation target folder enu.ProgramFilesComponent=Program Files enu.StatusRunHxDToCreateConfigFile=Create configuration file... enu.TaskConfigurationFile=Configuration file: enu.WriteProtectConfig=Make readonly enu.PortableButtonInstall=&Unpack rus.CreateConfigShowOptions=Показать окно параметров (после завершения установки) rus.CreateDefaultConfig=Создать конфигурацию по умолчанию rus.ForbiddenDirMessage=В портативном режиме %1 не следует устанавливать в «Program Files» или аналогичных системных каталогах. rus.InstallModePageCaption=Выберите тип установки rus.InstallModePageDescription=Предпочитаете интеграцию в Windows или портативную версию? rus.InstallModePageNormalOption=Нормальная - интеграция в Windows rus.InstallModePagePortableOption=Портативная - поддерживает переносимые устройства (USB/HDD) rus.InstallModePageSubCaption=Выберите нормальный тип для установки программы в Windows (добавление в меню Пуск, опционально в контекстное меню) или портативную для работы программы на любом ПК, совместимым с Windows rus.LanguageFilesComponent=Языки rus.OpenInstallFolderAfterInstall=Открыть папку установки rus.ProgramFilesComponent=Program Files rus.StatusRunHxDToCreateConfigFile=Создать файл конфигурации... rus.TaskConfigurationFile=Файл конфигурации: rus.WriteProtectConfig=Сделать доступным только для чтения rus.PortableButtonInstall=&Распаковать [Files] Source: "{app}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: not IsInPortableMode; Source: "{userdocs}\*"; DestDir: "{userdocs}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: not IsInPortableMode; Source: "{userappdata}\*"; DestDir: "{userappdata}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: not IsInPortableMode; Source: "{app}\*"; DestDir: "{app}\App\IconWorkshop"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: IsInPortableMode; Source: "{userdocs}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: IsInPortableMode; Source: "{userappdata}\*"; DestDir: "{app}\App\DefaultData"; Flags: ignoreversion recursesubdirs createallsubdirs; Check: IsInPortableMode; Source: "IconWorkshopPortable.exe"; DestDir: "{app}"; Flags: ignoreversion; Check: IsInPortableMode; Source: "IconWorkshop_RUS.reg"; DestDir: "{app}\Data"; DestName: "IconWorkshop.reg"; Flags: ignoreversion; Languages: rus; Check: IsInPortableMode; Source: "IconWorkshop_ENG.reg"; DestDir: "{app}\Data"; DestName: "IconWorkshop.reg"; Flags: ignoreversion; Languages: enu; Check: IsInPortableMode; #include "include\Registry.iss" [Run] Filename: netsh.exe; Parameters: "advfirewall firewall add rule name=""{#AppName}"" dir=in action=block program=""{app}\IconWorkshop.exe"" enable=yes"; Check: not IsInPortableMode; Flags: runhidden; Filename: netsh.exe; Parameters: "advfirewall firewall add rule name=""{#AppName}"" dir=out action=block program=""{app}\IconWorkshop.exe"" enable=yes"; Check: not IsInPortableMode; Flags: runhidden; [Icons] Name: {group}\{#AppName}; Filename: {app}\IconWorkshop.exe; Check: not IsInPortableMode; Name: {group}\{cm:UninstallProgram,{#AppName}}; Filename: {uninstallexe}; Check: not IsInPortableMode; Name: {autodesktop}\{#AppName}; Filename: {app}\IconWorkshop.exe; Tasks: desktopicon; Check: not IsInPortableMode; [Tasks] Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Check: not IsInPortableMode; [UninstallRun] Filename: taskkill; Parameters: "/f /im IconWorkshop.exe"; Flags: RunHidden; Filename: netsh.exe; Parameters: "advfirewall firewall delete rule name=""{#AppName}"""; Check: not IsInPortableMode; Flags: runhidden; #include "include\UninstallDelete.iss" [INI] ; Imported INI File: "C:\Users\Admin\Documents\Axialis Librarian\desktop.ini" Filename: "{userdocs}\Axialis Librarian\desktop.ini"; Section: ".ShellClassInfo"; Key: "IconFile"; String: "{app}\axlibico.dll"; Check: not IsInPortableMode; Filename: "{userdocs}\Axialis Librarian\desktop.ini"; Section: ".ShellClassInfo"; Key: "IconIndex"; String: "0"; Check: not IsInPortableMode; ; Imported INI File: "C:\Users\Admin\Documents\Axialis Librarian\Deleted Items\desktop.ini" Filename: "{userdocs}\Axialis Librarian\Deleted Items\desktop.ini"; Section: ".ShellClassInfo"; Key: "IconFile"; String: "{app}\axlibico.dll"; Check: not IsInPortableMode; Filename: "{userdocs}\Axialis Librarian\Deleted Items\desktop.ini"; Section: ".ShellClassInfo"; Key: "IconIndex"; String: "1"; Check: not IsInPortableMode; ; Imported INI File: "C:\Users\Admin\Documents\Axialis Librarian\Icons\desktop.ini" Filename: "{userdocs}\Axialis Librarian\Icons\desktop.ini"; Section: ".ShellClassInfo"; Key: "IconFile"; String: "{app}\axlibico.dll"; Check: not IsInPortableMode; Filename: "{userdocs}\Axialis Librarian\Icons\desktop.ini"; Section: ".ShellClassInfo"; Key: "IconIndex"; String: "6"; Check: not IsInPortableMode; ; Imported INI File: "C:\Users\Admin\Documents\Axialis Librarian\Media Files\desktop.ini" Filename: "{userdocs}\Axialis Librarian\Media Files\desktop.ini"; Section: ".ShellClassInfo"; Key: "IconFile"; String: "{app}\axlibico.dll"; Check: not IsInPortableMode; Filename: "{userdocs}\Axialis Librarian\Media Files\desktop.ini"; Section: ".ShellClassInfo"; Key: "IconIndex"; String: "12"; Check: not IsInPortableMode; ; Imported INI File: "C:\Users\Admin\Documents\Axialis Librarian\Media Files\Images\desktop.ini" Filename: "{userdocs}\Axialis Librarian\Media Files\Images\desktop.ini"; Section: ".ShellClassInfo"; Key: "IconFile"; String: "{app}\axlibico.dll"; Check: not IsInPortableMode; Filename: "{userdocs}\Axialis Librarian\Media Files\Images\desktop.ini"; Section: ".ShellClassInfo"; Key: "IconIndex"; String: "8"; Check: not IsInPortableMode; ; Imported INI File: "C:\Users\Admin\Documents\Axialis Librarian\Objects\desktop.ini" Filename: "{userdocs}\Axialis Librarian\Objects\desktop.ini"; Section: ".ShellClassInfo"; Key: "IconFile"; String: "{app}\axlibico.dll"; Check: not IsInPortableMode; Filename: "{userdocs}\Axialis Librarian\Objects\desktop.ini"; Section: ".ShellClassInfo"; Key: "IconIndex"; String: "14"; Check: not IsInPortableMode; [Code] #ifdef UNICODE #define A "W" #else #define A "A" #endif const RT_RCDATA = 10; var InputOptionPage: TInputOptionWizardPage; lResStream: TResourceStream; lPicHandle: THandle; i: integer; Install: TNewRadioButton; Portable: TNewRadioButton; PortablePanel: TPanel; InstallerPanel: TPanel; function CheckParam(s: string): boolean; begin for i := 0 to ParamCount do begin Result := ParamStr(i) = s; if Result then Break; end; end; function GetInstallDir(S: String): String; begin if CheckParam('/P') then Result:= ExpandConstant('{userdesktop}\{#AppName}') else Result:= ExpandConstant(S); end; function InstallCheck: Boolean; begin Result := Install.Checked or CheckParam('/I'); end; function IsInPortableMode: Boolean; begin Result := InputOptionPage.Values[1] and CheckParam('/P'); end; function GetDefaultDirName(const AParam: string): string; begin if ExpandConstant('{param:portable|0}') = '1' then Result := ExpandConstant('{userdesktop}') else Result := ExpandConstant('{autopf}'); end; //Запрет распаковки в системные папки-----Start----- function IsForbiddenDir(const ADir: string): Boolean; begin Result := IsAdminInstallMode and ((not IsWin64 and (Pos(ExpandConstant('{win}'), ADir) = 1)) or (not IsWin64 and (Pos(ExpandConstant('{commonpf32}'), ADir) = 1)) or (IsWin64 and (Pos(ExpandConstant('{commonpf64}'), ADir) = 1))); end; //Запрет распаковки в системные папки-----Finish----- //Замена пути распаковки в зависимости от типа-----Start----- procedure InstallModeListBoxClick(Sender: TObject); begin if IsInPortableMode and (CompareText(WizardDirValue, ExpandConstant('{autopf}\{#AppName}')) = 0) then WizardForm.DirEdit.Text := ExpandConstant('{userdesktop}\{#AppName}') else if not IsInPortableMode and (CompareText(WizardDirValue, ExpandConstant('{userdesktop}\{#AppName}')) = 0) then WizardForm.DirEdit.Text := ExpandConstant('{autopf}\{#AppName}'); end; //Замена пути распаковки в зависимости от типа-----Finish----- //Создание новой страницы-----Start----- procedure CreateInstallModePage; begin InputOptionPage := CreateInputOptionPage(wpWelcome, ExpandConstant('{cm:InstallModePageCaption}'), ExpandConstant('{cm:InstallModePageDescription}'), ExpandConstant('{cm:InstallModePageSubCaption}'), True, False); InputOptionPage.Add(ExpandConstant('{cm:InstallModePageNormalOption}')); InputOptionPage.Add(ExpandConstant('{cm:InstallModePagePortableOption}'));; InputOptionPage.Values[1] := ExpandConstant('{param:portable|0}') = '1'; InputOptionPage.Values[0] := not InputOptionPage.Values[1]; InputOptionPage.CheckListBox.OnClickCheck := @InstallModeListBoxClick; end; //Создание новой страницы-----Finish----- //Замена текста в кнопке "Далее" в зависимости от типа-----Start----- procedure CurPageChanged(CurPageID: Integer); begin case CurPageID of wpSelectTasks: begin if not IsInPortableMode then WizardForm.NextButton.Caption := SetupMessage(msgButtonInstall) else WizardForm.NextButton.Caption := ExpandConstant('{cm:PortableButtonInstall}'); end; end; end; //Замена текста в кнопке "Далее" в зависимости от типа-----Finish----- //Уведомление о запрете распаковки в системные папки-----Start----- function NextButtonClick(CurPageID: Integer): Boolean; begin Result := True; case CurPageId of wpSelectDir: if IsInPortableMode then begin Result := not IsForbiddenDir(WizardDirValue); if not Result then MsgBox(ExpandConstant('{cm:ForbiddenDirMessage,{#AppName}}'), mbError, MB_OK); end; end; end; //Уведомление о запрете распаковки в системные папки-----Finish----- //Отключение страници создания папку в Пуске при выборе типа Портативная-----Start----- function ShouldSkipPage(PageID: Integer): Boolean; begin Result := False; case PageID of wpSelectProgramGroup: Result := IsInPortableMode; end; end; //Отключение страници создания папку в Пуске при выборе типа Портативная-----Finish----- function GetFromRes(const ResName, SaveFileName: String): Boolean; begin lResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA); try lResStream.SaveToFile(ExpandConstant('{tmp}\') + SaveFileName); finally lResStream.Free; Result := FileExists(ExpandConstant('{tmp}\') + SaveFileName); end; end; //Подгрузка новой страницы-----Start----- procedure InitializeWizard; begin CreateInstallModePage; with WizardForm do begin if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_WMSI', 'WMSI.png') then begin lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\WMSI.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, False); WizardSmallBitmapImage.Hide; ImgSetVisibility(lPicHandle, True); ImgApplyChanges(MainPanel.Handle); end; end; end; //Подгрузка новой страницы-----Finish----- procedure DeinitializeSetup(); begin gdipShutDown(); end; function SetFileAttributes(lpFileName: string; dwFileAttributes: integer): integer; external 'SetFileAttributes{#A}@kernel32.dll stdcall'; procedure CurStepChanged(CurStep: TSetupStep); var RC: integer; begin if CurStep = ssInstall then begin Exec(ExpandConstant('taskkill'), ' /f /im IconWorkshop.exe', '', SW_HIDE, ewWaitUntilTerminated, RC); end; if CurStep = ssDone then begin if not IsInPortableMode then SetFileAttributes((ExpandConstant('{userdocs}\Axialis Librarian\desktop.ini')), FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM); SetFileAttributes((ExpandConstant('{userdocs}\Axialis Librarian\Deleted Items\desktop.ini')), FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM); SetFileAttributes((ExpandConstant('{userdocs}\Axialis Librarian\Icons\desktop.ini')), FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM); SetFileAttributes((ExpandConstant('{userdocs}\Axialis Librarian\Media Files\desktop.ini')), FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM); SetFileAttributes((ExpandConstant('{userdocs}\Axialis Librarian\Media Files\Images\desktop.ini')), FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM); SetFileAttributes((ExpandConstant('{userdocs}\Axialis Librarian\Objects\desktop.ini')), FILE_ATTRIBUTE_HIDDEN or FILE_ATTRIBUTE_SYSTEM); end; if CurStep = ssDone then begin if not IsInPortableMode then if RegKeyExists(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{#SetupSetting("AppID")}_is1') and not WizardSilent then MsgBox('Готово!', mbInformation, MB_OK) else if not WizardSilent then MsgBox('Установка {#AppName} была прервана!', mbError, MB_OK); end; if CurStep = ssDone then begin if IsInPortableMode then if not WizardSilent then if FileExists(ExpandConstant('{app}\IconWorkshopPortable.exe' )) then MsgBox('Готово!', mbInformation, MB_OK) else if not FileExists(ExpandConstant('{app}\IconWorkshopPortable.exe' )) then MsgBox('Установка {#AppName} была прервана!', mbError, MB_OK); end; end; procedure InitializeUninstallProgressForm; begin with UninstallProgressForm do begin if GetFromRes('_IS_BOTVA', 'botva2.dll') and GetFromRes('_IS_WMSI', 'WMSI.png') then begin lPicHandle := ImgLoad(MainPanel.Handle, ExpandConstant('{tmp}\WMSI.png'), WizardSmallBitmapImage.Left, WizardSmallBitmapImage.Top, WizardSmallBitmapImage.Width, WizardSmallBitmapImage.Height, True, False); WizardSmallBitmapImage.Hide; ImgSetVisibility(lPicHandle, True); ImgApplyChanges(MainPanel.Handle); end; end; end; procedure DeinitializeUninstall(); begin gdipShutDown(); end; |
------- Отправлено: 10:28, 25-10-2020 | #706 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Приветствую.
У меня такая проблема, имеется программа которая скомпеллирована из двух исполняемых файлов и запускается из экзешника без установки. При первом ее запуске, в системе на постоянной основе начинает работать исполняемый файл, и после закрытия программы этот файл остается в работе. При последующих запусках этой программы, она уже не запускается и выдает ошибку, так как ей мешает запустившийся исполняемый файл, который начал исполняться во время первого запуска программы. ВОПРОС, как сделать что бы программа которая скомпеллирована из двух исполняемых файлов и запускается из экзешника без установки, игнорировала файл который ей мешает при повторном запуске или перезаписывала его вновь? |
Последний раз редактировалось Egiptyanin245, 28-10-2020 в 11:33. Отправлено: 00:43, 27-10-2020 | #707 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 22:37, 27-10-2020 | #708 |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать не совсем понял что вы имели ввиду? советуете мне исправить формулировку вопроса? если так, то уже исправил.
|
Отправлено: 11:30, 28-10-2020 | #709 |
Новый участник Сообщения: 1
|
Профиль | Сайт | Отправить PM | Цитировать Скиньте плиз все srep и rep одним архивом, и isdone 5 и 6 версию финал
|
Отправлено: 00:44, 22-11-2020 | #710 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Скрипты Inno Setup. Помощь и советы [часть 7] | El Sanchez | Автоматическая установка приложений | 2499 | 02-02-2015 08:59 | |
Скрипты Inno Setup. Помощь и советы [часть 6] | El Sanchez | Автоматическая установка приложений | 2494 | 10-03-2014 11:51 | |
Скрипты 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 |
|