|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 4] |
|
Скрипты Inno Setup. Помощь и советы [часть 4]
|
Ветеран Сообщения: 1273 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме Inno Setup. Прочие вопросы. Предыдущие ветки обсуждения по ссылкам ниже и в прикреплённых архивах: Inno Setup [все вопросы] часть 1 Inno Setup [все вопросы] часть 2 Скрипты Inno Setup. Помощь и советы [часть 3] Продолжение обсуждения Скрипты Inno Setup. Помощь и советы [часть 5] |
|
Отправлено: 18:01, 29-08-2011 |
Ветеран Сообщения: 978
|
Профиль | Сайт | Отправить PM | Цитировать alert30,
Цитата Лександер:
Цитата alert30:
|
||
------- Отправлено: 20:39, 31-12-2011 | #531 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1273
|
Профиль | Отправить PM | Цитировать Цитата TROY Diamond:
|
|
Отправлено: 00:11, 01-01-2012 | #532 |
Пользователь Сообщения: 91
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Serega:
А то получается я пишу через код, что к примеру требуется 8 ГБ, а потом вылезает табличка, что места не хватает и нужно гигов 15... Что пользователь подумает? Цитата:
Иначе бы использовал бы [UninstallDelete]. |
||
Отправлено: 01:16, 01-01-2012 | #533 |
Пользователь Сообщения: 91
|
Профиль | Сайт | Отправить PM | Цитировать 1. Мне нужно наложить картинку на все диалоговые окна инсталлятора, КРОМЕ ПЕРВОЙ И ПОСЛЕДНЕЙ. А здесь есть на все окна... и только на первую и последнюю.
2. Как создать файл, текстовый и другие, НО ТОЛЬКО С ОДНИМ ЗНАЧЕНИЕМ "ВНУТРИ", БЕЗ параметра, никаких "Section", "InstallPath", НЕ надо! Только одно значение БЕЗ всего - в одну строчку, без кавычек, тире, двоеточий, типа открыл это файл, а там только: htuifgvifgj4575489jgfkgfmgf765авроршгщ и всё больше ничего нет! 3. Мне нужно, чтобы мой установщик при запуске находил уже ранее установленное приложение, НЕ только моим, НО и другими установщиками. Вот с этим вариантом можно что-нибудь сделать: var AppDir, unins, run: string; ResultCode: Integer; UninsButton, RunButton: TButton; MyLabel: TLabel; procedure ReadEntries; begin RegQueryStringValue(HKLM, 'SOFTWARE\My Prog', 'Path', AppDir); end; procedure CancelButtonClick(CurPageID: Integer; var Cancel, Confirm: Boolean); begin ReadEntries; if (RegValueExists(HKLM, 'SOFTWARE\My Prog'', 'Path')) and (FileExists(ExpandConstant(AppDir)+'\My Program.exe')) then Confirm:= False else Confirm:= True; end; procedure Uninstall(Sender: TObject); begin unins:='unins000.exe'; ReadEntries; if not (FileExists(AddBackslash(AppDir) + unins)) then MsgBox('Невозможно запустить деинсталляцию программы ' + ExpandConstant('My Prog'') + ', т.к. исполняемый файл деинсталляции unins000.exe не найден.', mbCriticalError, MB_OK or MB_DEFBUTTON1) else Exec(AddBackslash(AppDir) + unins, '', ExtractFilePath(AddBackslash(AppDir) + unins), SW_SHOW, ewNoWait, ResultCode); WizardForm.Close; end; procedure RunProgramm(Sender: TObject); begin run:='My Program.exe'; ReadEntries; if (FileExists(AddBackslash(AppDir) + run)) then Exec(AddBackslash(AppDir) + run, '', ExtractFilePath(AddBackslash(AppDir) + run), SW_SHOW, ewNoWait, ResultCode); WizardForm.Close; end; procedure NewForm; begin ReadEntries; if (RegValueExists(HKLM, 'SOFTWARE\My Prog'', 'Path')) and (FileExists(ExpandConstant(AppDir)+'\My Program.exe')) then begin with WizardForm do begin ClientWidth := ScaleX(395); ClientHeight := ScaleY(120); Bevel.Hide; InnerNotebook.Hide; OuterNotebook.Hide; BorderStyle:= bsDialog; Center; with CancelButton do begin Left := WizardForm.CancelButton.Left -100; Top := WizardForm.ClientHeight - CancelButton.Height - ScaleY(10); BringToFront; end; UninsButton:= TButton.Create(WizardForm); with UninsButton do begin Left := WizardForm.NextButton.Left -100; Top := WizardForm.ClientHeight - NextButton.Height - ScaleY(10); Width:= WizardForm.NextButton.Width; Parent:= WizardForm; Caption:= 'Удалить'; OnClick := @Uninstall; BringToFront; end; RunButton:= TButton.Create(WizardForm); with RunButton do begin Left := WizardForm.BackButton.Left -110; Top := WizardForm.ClientHeight - BackButton.Height - ScaleY(10); Width:= WizardForm.BackButton.Width; Parent:= WizardForm; Caption:= 'Запустить'; OnClick := @RunProgramm; BringToFront; end; MyLabel:= TLabel.Create(WizardForm); with MyLabel do begin SetBounds(10,10,380,80); AutoSize:=False; WordWrap:=True; Font.Color:=$000000; Font.Style:=[fsBold]; Font.Size:=10; Parent:=WizardForm; Transparent:=True; Caption:= 'Программа ' + ExpandConstant('«My Prog'»') + ' уже установлена на Ваш компьютер.' +#13#13+ 'Выберите нужное действие.'; end; end; end; end; procedure InitializeWizard; begin NewForm; end; 4. Мне нужно как в этом коде, только "универсально", чтобы "всем подходило": function InitializeSetup(): Boolean; var ResultCode: Integer; ResultStr:string; begin Result:=True; begin If RegQueryStringValue(HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\My Prog_is1', 'UninstallString', ResultStr) then begin If ResultStr<>'' then begin ResultStr:=RemoveQuotes(ResultStr); if MsgBox('Эта программа уже была ранее установлена.' #13#13 'Вы хотите предварительно удалить её?', mbInformation, MB_YESNO) = idYes then if not Exec(ResultStr, '', '', SW_SHOWNORMAL, ewWaitUntilTerminated, ResultCode) then MsgBox('Ошибка удаления. ' #13#13 '' + SysErrorMessage(ResultCode) + '.' #13#13 'Вероятно, деинсталлятор был перемещён, удалён или переименован.', mbError, MB_OK); end; end; end; end; Как из секции [code] запустить приложение, файл, батник и т.п. в тихом режиме, БЕЗ запроса, с правами Администратора и с "мнгновенным" удалением сразу же после того как действие будет выполнено? |
Отправлено: 02:42, 01-01-2012 | #534 |
Ветеран Сообщения: 989
|
Профиль | Отправить PM | Цитировать Всех с наступившим Новым Годом!
Подскажите пожалкуйста. При указывании AppId: запись в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall выглядит так: Можно ли как-то избавиться от этого _is1? Чтоб было как в AppId-Программа? |
Последний раз редактировалось МИШАНЧИК, 02-01-2012 в 03:47. Отправлено: 04:42, 01-01-2012 | #535 |
![]() Пользователь Сообщения: 80
|
Профиль | Отправить PM | Цитировать Цитата МИШАНЧИК:
|
|
Отправлено: 13:52, 02-01-2012 | #536 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать МИШАНЧИК, dracosha, это клеймо сделано специально. Если будет установлена другая программа с тем же AppId, в этом случае клеймо станет _is2
|
------- Отправлено: 18:41, 02-01-2012 | #537 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать Доброго времени суток. Помогите, пожадуйста разобраться в проблеме.
Собственно стоит задача, во время удаления программы, спросить у пользователя разрешения на удаление некоторых файлов. Для этого я в секции [UninstallDelete] добавил строчку такого содержания: где функция isDeleteSetting выглядит так: function isDeleteSetting: Boolean; begin Result := MsgBox('Удалить настройки программы?', mbConfirmation, MB_YESNO) = IDYES; end; Как можно исправить эту проблему? Версия Inno Setup: 5.4.3 Полный код примера: http://pastebin.com/XKvSLsdc |
Отправлено: 19:05, 02-01-2012 | #538 |
Ветеран Сообщения: 1640
|
Профиль | Отправить PM | Цитировать kangreon,
наверное так: [*C*ode] var isUninst : string; function InitializeUninstall(): Boolean; begin isUninst := 'isUninst'; result := true; end; function isDeleteSetting: Boolean; begin Result := False; if isUninst = 'isUninst' then if (MsgBox('Удалить настройки программы?', mbConfirmation, MB_YESNO) = IDYES) then Result := True; end; [*C*ode] procedure RD(Dir:string); begin Exec('cmd.exe', ' /c rd /S /Q ' + AddQuotes(Dir),ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res); Exec('cmd.exe', ' /c rd /S /Q ' + '"'+Dir+'"',ExpandConstant('{sys}'), SW_Hide,ewWaitUntilTerminated,res); end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); begin if CurUninstallStep=usDone then begin if DirExists(ExpandConstant('{app}\Data')) then begin if MsgBox('Удалить настройки?',mbconfirmation, mb_yesno) = IDYES then RD(ExpandConstant('{app}\Data')) end; end; |
------- Последний раз редактировалось R.i.m.s.k.y., 02-01-2012 в 19:45. Отправлено: 19:21, 02-01-2012 | #539 |
Новый участник Сообщения: 2
|
Профиль | Отправить PM | Цитировать R.i.m.s.k.y., Спасибо за подсказку. Сейчас попробую Ваш код.
Добавление проверки в мой изначальный код не помогло. Проблема остается. Функция isDeleteSetting не вызывается во время процесса удаления. Возможно это баг компилятора... |
Отправлено: 19:35, 02-01-2012 | #540 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Test | ferget | Тест-форум | 0 | 24-08-2011 01:25 | |
test | ! ! Aaa ! ! | Тест-форум | 0 | 23-04-2011 11:29 | |
test | Santa aka Snt | Тест-форум | 0 | 16-04-2011 22:35 | |
test | xolod. | Программное обеспечение Linux и FreeBSD | 0 | 19-04-2009 21:03 | |
Test memory | KEugeNik | Хочу все знать | 11 | 23-11-2003 23:11 |
|