VlVlV
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пожалуйста, помогите адаптировать старый скрипт к новой версии ИС. Суть в том, чтобы можно было устанавливать без перезагрузки поверх запущенной программы любое количество раз (многие файлы заблокированы). Этот скрипт писал давно, и в старой версии ИС он прекрасно работает, а в самой новой он не выполняет ничего, что от него требуется. Подставлял мсгбоксы в разные места скрипта, и увидел, что идет какая-то задержка передачи аргумента с именем текущего файла. Вместо этого ИС сам пытается удалить файл, естественно не может и выкидывает свое окно: прервать/повтор/пропустить. Как оказалось, второй скрипт тоже рабочий, просто я запускал готовый инсталятор из под ИС, который у меня портативный, т.е. установка происходила в песочнице, потому и не работало. Удалять не буду, может кому пригодится. Оба скрипта немного доработал. ----------------------------------------------------------------- inno setup 4.2.7 (все работает) [Files] Source: "{app}\1.exe"; DestDir: "{app}"; BeforeInstall: "BeforeFileInstall({app}\1.exe)"; Flags: ignoreversion uninsrestartdelete Source: "{app}\2.exe"; DestDir: "{app}"; BeforeInstall: "BeforeFileInstall({app}\2.exe)"; Flags: ignoreversion uninsrestartdelete Source: "{app}\3.dll"; DestDir: "{app}"; BeforeInstall: "BeforeFileInstall({app}\3.dll)"; Flags: ignoreversion uninsrestartdelete [Code] var FileName: String; TempFileName: String; TempFileNameFull: String; ResultCode: Integer; i: Integer; procedure BeforeFileInstall(FileNameFull: String); begin if FileExists(FileNameFull) then begin if DeleteFile(FileNameFull) = False then begin FileName := ExtractFileName(FileNameFull); if FileName = '2.exe' then begin InstExec(AddBackslash(ExpandConstant('{app}')) + 'xxx.exe', '/c', '', True, False, SW_SHOW, ResultCode); end; if FileName = 'help.chm' then begin InstExec(AddBackslash(ExpandConstant('{sys}')) + 'taskkill.exe', '/f /im hh.exe', '', True, False, SW_HIDE, ResultCode); end; i := 0; while i < 5 do begin if DeleteFile(FileNameFull) then i := 5 else i := i + 1; Sleep(1000); end; if FileExists(FileNameFull) then begin TempFileName := ExtractFileName(GenerateUniqueName(FileName, '.tmp')); TempFileNameFull := AddBackslash(ExtractFilePath(FileNameFull)) + TempFileName; RenameFile(FileNameFull, TempFileNameFull); if FileExists(TempFileNameFull) then begin RegWriteStringValue (HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce', TempFileName, 'cmd /c del ' + AddQuotes(TempFileNameFull)); end; end; end; end; end; ----------------------------------------------------------------- inno setup 5.5.2 (ошибок нет, но не работает) [Files] Source: "{app}\1.exe"; DestDir: "{app}"; BeforeInstall: "BeforeFileInstall('1.exe')"; Flags: ignoreversion uninsrestartdelete Source: "{app}\2.exe"; DestDir: "{app}"; BeforeInstall: "BeforeFileInstall('2.exe')"; Flags: ignoreversion uninsrestartdelete Source: "{app}\3.dll"; DestDir: "{app}"; BeforeInstall: "BeforeFileInstall('3.dll')"; Flags: ignoreversion uninsrestartdelete Source: "{app}\4.dll"; DestDir: "{app}"; BeforeInstall: "BeforeFileInstall('4.dll')"; Flags: ignoreversion uninsrestartdelete Source: "{app}\5.dll"; DestDir: "{app}"; BeforeInstall: "BeforeFileInstall('5.dll')"; Flags: ignoreversion uninsrestartdelete [Code] procedure BeforeFileInstall(FileNameFull: String); var FileName: String; TempFileName: String; TempFileNameFull: String; ResultCode: Integer; i: Integer; begin FileNameFull := AddBackslash(ExpandConstant('{app}')) + FileNameFull; if FileExists(FileNameFull) then begin if DeleteFile(FileNameFull) = False then begin FileName := ExtractFileName(FileNameFull); if FileName = '2.exe' then begin Exec(AddBackslash(ExpandConstant('{app}')) + 'xxx.exe', '/c', '', SW_SHOW, ewNoWait, ResultCode); end; if FileName = 'help.chm' then begin Exec(AddBackslash(ExpandConstant('{sys}')) + 'taskkill.exe', '/f /im hh.exe', '', SW_HIDE, ewNoWait, ResultCode); end; i := 0; while i < 5 do begin if DeleteFile(FileNameFull) then i := 5 else i := i + 1; Sleep(1000); end; if FileExists(FileNameFull) then begin TempFileName := ExtractFileName(GenerateUniqueName(FileName, '.tmp')); TempFileNameFull := AddBackslash(ExtractFilePath(FileNameFull)) + TempFileName; RenameFile(FileNameFull, TempFileNameFull); if FileExists(TempFileNameFull) then begin RegWriteStringValue (HKLM, 'SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce', TempFileName, 'cmd /c del ' + AddQuotes(TempFileNameFull)); end; end; end; end; end; | Всего записей: 286 | Зарегистр. 02-07-2009 | Отправлено: 11:56 16-01-2013 | Исправлено: VlVlV, 23:39 18-01-2013 |
|