Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]
mat_y@vk
29-07-2013, 14:09
Так просто используйте расширеную версию. »
Она не собирает мой скрипт :(
UPD. Поставил версию ANSI... собрал.
rezvorck
29-07-2013, 14:19
Добрый день господа знатоки!
Подскажите как заставить загружать текст с файла в Memo во время инсталяции через промежуток времени в замкнутом цикле.
Ниже моя реализация скрипта. Логически все правильно а текст не грузит! (приклеплен downloader - выводит размер файла и состояние в лог, написан на Delphi через Indy, в Dll не силен!)
ссылка на архив (http://rghost.ru/47746803)
mat_y@vk
29-07-2013, 14:28
Да, кстати, проблема копирования внешней папки на компе решалась простым Flags: external. Вот я ламер.
Ребят... еще такой вопрос... у меня у друга в Европе мой инсталл отображает все симоволы русские крякозябрами... в чем может быть проблема? Языковой пакет у него стоит русский.
http://s57.radikal.ru/i155/1307/c0/134cc0f9fdda.png
Noname22
29-07-2013, 14:50
отображает все симоволы русские крякозябрами »Смотря какая версия inno используется Unicode или ANSI. Просто может быть так, что скрипт Unicode-ной версии запустили на ANSI и получилась такая бяка
[CustomMessages]
russian.NameAndVersion=%1, версия %2
russian.AdditionalIcons=Дополнительные значки:
russian.CreateDesktopIcon=Создать значок РЅР° &Р*абочем столе
russian.CreateQuickLaunchIcon=Создать значок в &Панели быстрого запуска
russian.ProgramOnTheWeb=Сайт %1 РІ Р˜РЅС‚РµСЂРЅРµС‚Рµ
russian.UninstallProgram=Деинсталлировать %1
russian.LaunchProgram=Запустить %1
russian.AssocFileExtension=Св&язать %1 с файлами, имеющими расширение %2
russian.AssocingFileExtension=Связывание %1 с файлами %2...
russian.AutoStartProgramGroupDescription=Автозапуск:
russian.AutoStartProgram=Автоматически запускать %1
russian.AddonHostProgramNotFound=%1 не найден в указанной вами папке.%n%nВы всё равно хотите продолжить?
Кстати пароль нужен? Вон выше выбирайте любой :teeth:!
mat_y@vk
29-07-2013, 14:54
Noname22, сейчас попробую Unicode собрать.
Ругается на PChar... говорит тип не знает такой.... что делать?
Noname22
29-07-2013, 15:00
mat_y@vk, Может стоит попробовать скрипт открыть в Akelpad с подбором кодировки для прочтения [CustomMessages] если в нём дело!? Если в нём то открыть скрипт, подобрать кодировку, просто скопировать секцию из Akelpad, закрыть скрипт, открыть скрипт в inno а потом вставить скопированное!
mat_y@vk
type
Pchar =PansiChar;
mat_y@vk
29-07-2013, 15:07
type
Pchar =PansiChar; »
ага... уже сам догнал
type
Pchar =PansiChar;
Noname22, Может стоит попробовать скрипт открыть в Akelpad с подбором кодировки для прочтения [CustomMessages] если в нём дело!? Если в нём то открыть скрипт, подобрать кодировку, просто скопировать секцию из Akelpad, закрыть скрипт, открыть скрипт в inno а потом вставить скопированное! »
Я может не выспался, но этот квест я осилить в воображении не смог.
Кстати пароль нужен? Вон выше под спойлером выбирайте любой ! »
Моя задача решилась просто установкой версии Ultra
mat_y@vk
29-07-2013, 15:24
пересохранил скрипт в Unicode... стало лучше, но не до конца.
http://gyazo.com/2aa159eb68dd15511d01184f14883647.png
Крякозябры идут в том, что описано в секции CODE.
Идеи?
Может стоит попробовать скрипт открыть в Akelpad »
А Notepad++ не подойдет?
Noname22
29-07-2013, 15:40
Крякозябры идут в том, что описано в секции CODE. »Аналогично, подобрать кодировку, пере копировать надписи!
А Notepad++ не подойдет? »Подойдёт.
P.S Вы хоть оригинальный файл скрипта сохранили на всякий случай?
mat_y@vk
29-07-2013, 15:55
P.S Вы хоть оригинальный файл скрипта сохранили на всякий случай? »
А Вы вовремя.... я опытный экспериментатор... у меня резервы даже в разных источниках хранятся (диски, флешки, сеть) :)
Проблема решилась кодировкой ANCI и выбором в винде языка системы "русский"
Noname22
29-07-2013, 16:07
я опытный экспериментатор... »Я на это и надеялся!
Проблема решилась кодировкой ANCI и выбором в винде языка системы "русский" »На всё, все способы хороши!
alex barmalei
29-07-2013, 21:29
Думаю, что проблема простая, но туплю жестко.
Простая установка программы с выбором компонентов.
Компоненты работают, но проблема вот в чем:
После установки в папке с прогой оказываются файлы компонентов.
Т.е. если я выбираю компонент, то он ставится (myapp.exe), но в папку копируются все компоненты (myapp, 1.exe, myapp, 2.exe).
Понял, что строка, которая рекурсивно описывает все папки и файлы является виновником моей проблемы.
Т.е. если я удалю строку:
[Files]
Source: E:\tmp\app\*; DestDir: {app}; Flags: ignoreversion recursesubdirs createallsubdirsто все работает как надо (естественно непрописаные файлы не копируются).
Похоже надо, чтобы в скрипте был прописан КАЖДЫЙ файл, но их там больше тысячи - руками я замучаюсь.
Как автоматически сделать список ВСЕГО, что есть в сходной папке ?
Как автоматически сделать список ВСЕГО, что есть в сходной папке ? »
Компилятор делает этом сам. И условие для установки каждого компонента все равно придется описывать вручную. Конечно, когда компонентов много, это муторно, но иначе никак. Ну и, нет нужды описывать каждый файл индивидуально. Если компонент состоит из группы файлов, достаточно предварительно раскидать их по каталогам и при компиляции брать оттуда по маске с указателем на компонент.
alex barmalei
29-07-2013, 22:47
saurn, хоть успокоил на счет списка :)
Обычных файлов дофига, компонентов немного.
Вот как выглядит
[Files]
Source: E:\tmp\app\readme, rus.txt; DestDir: {app}; Flags: ignoreversion external; DestName: "readme.txt"; Components: lang\rus;
Source: E:\tmp\app\readme, eng.txt; DestDir: {app}; Flags: ignoreversion external; DestName: "readme.txt"; Components: lang\eng;
[Types]
Name: full; Description: Full installation; Flags: iscustom;
[Components]
Name: "lang"; Description: Мануал; Types: full; Flags: fixed;
Name: "lang\rus"; Description: "Русский"; Flags: exclusive;
Name: "lang\eng"; Description: "English"; Flags: exclusive;
При выборе определенного компонента он ставится, но вместе с ним копируются и исходные, которые копироваться не должны. Может у меня во флагах косяк?
alex barmalei
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
[Types]
Name: full; Description: Full installation; Flags: iscustom;
[Components]
Name: "lang"; Description: Мануал; Types: full; Flags: fixed;
Name: "lang\rus"; Description: "Русский"; Flags: exclusive;
Name: "lang\eng"; Description: "English"; Flags: exclusive;
[Files]
Source: rus.txt; DestDir: {app}; DestName: "readme.txt"; Components: lang\rus;
Source: eng.txt; DestDir: {app}; DestName: "readme.txt"; Components: lang\eng;
alex barmalei, с флагами все нормально, кроме флага external, если планируете его использовать, то путь к устанвливаемым файлам нужно указывать не абсолютный, а через константу, например Source: {src}\tmp\app\readme, rus.txt;, где {src} корневая папка инстала. Что касается установки других фалов вместе с выбранными компонентами, то, могу лишь предположить, что ниже в секции файлов имеется строка, которая берет файлы из тойже папки по маске, если да, то она и переписывает условия описаные выше. В данном случае, как я и говорил, нужно раскидывать файлы по каталогам, или использовать параметр Excludes, например Source: app\*; Exludes: rus.txt, eng.txt; DestDir: {app}; Flags: ignoreversion;, но этот параметр не комбинируется с флагом external.
jiumx60rus
29-07-2013, 23:20
либо ищи адрес, откуда он грузится, либо загрузи его на свой сервер и качай itDownloader-ом оттуда. »
Сам адрес-то и прописан в CompileCode.bin, так что узнать его невозможно.
раз родным инсталлятором он устанавливается по тихому, то логично предположить, что у него есть ключи тихой установки. про эти ключи можно почитать на сайте oszone.net в разделе справки про автоматическую установку Windows. »
Как раз-таки родным и не тихо он устанавливается, это мне надо сделать тихую установку :)
В общем я уже понял, что то, что я задумал, неосуществимо, тогда еще есть такой вопросик: ключи /silent не работают при подключенном интернете (установка заканчивается не начавшись), а при выключенном работают. Это связано с тем, что в процессе установки докачивается файлик. Так вот, можно ли это исправить?
Спасибо за внимаение!
alex barmalei
30-07-2013, 00:07
saurn, ок, будут проверять.
А Excludes с абсолютными путями работает?
Johny777
30-07-2013, 03:03
jiumx60rus, Если я правильно понимаю тебе нужно скачать инсталл из интернета и тихо установить.
Вопросъ: Нафига тебе далась эта библиотека itdownload.dll ? Ведь фиг знает что там внутри
_ В шапке функция скачивания El Sanchez-а, ""Загрузка файла из Интернет"" http://forum.oszone.net/post-1930003-232.html
_ Вот её обновлённая/доработанная версия http://forum.oszone.net/post-2149513-443.html
_ До кучи ещё простая функция скачивания файла без каллбэка function DownloadFile(const URL, FileName: String): Boolean; http://forum.oszone.net/post-2099033-1730.html
=================
касательно тихой установки вот тебе код. Сделал так чтоб можно было тихо и обычно установить.
Чтоб была тихая установка запускаешь инсталл с параметром ком строки из под константы VERY_SILIENT_PARAM. Можешь свой параметр придумать, если хочешь :)
#define A = (Defined UNICODE) ? "W" : "A"
const
GCL_STYLE = -26;
CS_NOCLOSE = $200;
WM_LBUTTONDOWN = $0201;
WM_LBUTTONUP = $0202;
VERY_SILIENT_PARAM = '-!VerySilient!';
var
VerySilient: Boolean;
function ShowWindow(hWnd: HWND; nCmdShow: Integer): BOOL; external 'ShowWindow@User32.dll stdcall';
function SetClassLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): DWORD; external 'SetClassLong{#A}@User32.dll stdcall';
function GetClassLong(hWnd: HWND; nIndex: Integer): DWORD; external 'GetClassLong{#A}@User32.dll stdcall';
procedure InitializeWizard();
begin
VerySilient := Pos(VERY_SILIENT_PARAM, GetCmdTail) <> 0;
if VerySilient then
begin
ShowWindow(Application.Handle, SW_HIDE); // прячем кнопку в панели задач
SetClassLong(WizardForm.Handle, GCL_STYLE, GetClassLong(WizardForm.Handle, GCL_STYLE) or CS_NOCLOSE); // без Alt+F4
// прячем форму
WizardForm.BorderStyle := bsNone;
WizardForm.SetBounds(Screen.Width-777, Screen.Height-777, 0, 0);
end;
end;
procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID = wpReady then if VerySilient then
begin
PostMessage(WizardForm.NextButton.Handle, WM_LBUTTONDOWN, 0, 0);
PostMessage(WizardForm.NextButton.Handle, WM_LBUTTONUP, 0, 0);
end;
end;
function ShouldSkipPage(PageID: Integer): Boolean;
begin
case PageID of
wpWelcome, wpSelectDir, wpFinished {, другие твои страницы}: Result := VerySilient;
end;
end;
procedure DeinitializeSetup();
begin
/MsgBox('Installed', mbInformation, MB_OK);
end;
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC