|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » Скрипты Inno Setup. Помощь и советы [часть 4] |
|
|
Скрипты Inno Setup. Помощь и советы [часть 4]
|
|
Ветеран Сообщения: 1274 |
Внимание! Данная тема предназначена только для обсуждения написания скриптов !
Остальные вопросы, а также последние версии компилятора в теме 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 |
|
Ветеран Сообщения: 1274
|
Профиль | Отправить 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 | |
|