Войти

Показать полную графическую версию : Скрипты Inno Setup. Помощь и советы [часть 6]


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 [104] 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125

alert30
31-01-2014, 15:23
А поаккуратней нельзя? »
Могу сделать по-аккуратнее, но это займет много времени.

saurn
31-01-2014, 17:33
Подскажите как попроще сделать апдейт и анинстал? »
Апдейт, сам по себе, обычный установщик, со спецефическими функциями, как, например: автоопределение папки с установленной программой, версии и т.д.. А вот анинстал чего? Если нужно удалять только апдейт, тогда при его установке нужно описывать создание резервной копии старых файлов, а при удалении востановление этих файлов, соответственно.

diman_21Ru
31-01-2014, 22:46
Всем привет можно ли как у Jove в мод-паке сделать выбираешь папку с игрой если найдет ярлык игры то моды ставятся именно туда , зарание спасибо :)

saurn
01-02-2014, 00:00
diman_21Ru, в качестве примера: если в выбранной папке найден требуемый файл, в качестве пути установки будет выбран путь к корневой папке файла, если не найден, путь установки сбросится на дефолтный.
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
AppendDefaultDirName=no
OutputDir=...


[Files]
Source: compiler:Examples\MyProg.exe; DestDir: {app}; Flags: overwritereadonly ignoreversion;


[Code]
function SearchFile(const Path: String; const Name: String): Boolean;
var
DefaultPath: String;
begin
DefaultPath := ExpandConstant('{#SetupSetting("DefaultDirName")}');
Result := FileExists(AddBackslash(Path) + Name);
case Result of
True: WizardForm.DirEdit.Text := Path;
False:
begin
Result := (WizardForm.DirEdit.Text = DefaultPath);
if Result then Exit;
case MsgBox('В данной папке отсутствуют файлы игры. Путь установки будет сброшен на значение по умолчанию.', mbError, MB_OK) of
1: WizardForm.DirEdit.Text := DefaultPath;
end;
end;
end;
end;


procedure DirEditOnChange(Sender: TObject);
begin
SearchFile(WizardDirValue(), 'MyProg.exe');
end;


procedure InitializeWizard();
begin
WizardForm.DirEdit.OnChange := @DirEditOnChange;
end;

diman_21Ru
01-02-2014, 00:08
saurn ,что то не получилось (

saurn
01-02-2014, 00:29
что то не получилось ( »
Конечно, ведь это просто пример. Имя файла, который нужно найти вы, наверняка, не указали.
procedure DirEditOnChange(Sender: TObject);
begin
SearchFile(WizardDirValue(), //Путь к папке, в которой производится поиск файла. В данном случае путь берется из DirEdit.
'MyProg.exe'); //Имя файла, который ищем.
end;

diman_21Ru
01-02-2014, 00:31
ок попробую

diman_21Ru
01-02-2014, 10:32
вообще не как не получается кто сможет в скрипт добавить !

dr.alexa2000@vk
01-02-2014, 11:48
Есть код, в котором при деинсталляции удаляется папка с сохранениями:
procedure DeleteSavedGames(CurUninstallStep: TUninstallStep);
begin
if CurUninstallStep=usUninstall then
if DirExists(ExpandConstant('{userdocs}')+'\Assassin's Creed Revelations' then
if MsgBox(ExpandConstant('{cm:DeleteSave}'), mbInformation, MB_YESNO) = idYes then
DelTree(ExpandConstant('{userdocs}')+'\Assassin's Creed Revelations', True, True, True)
end;
Но т.к. папка Assassin's Creed Revelations содержит знак ' (кавычку), то inno setup не понимает что надо удалить эту папку.
Как исправить?

Ivan_009
01-02-2014, 11:51
diman_21Ru, Путь надо указать пример запуск игры после установки

var
RunEXE: TNewButton;

procedure LaunchButtonOnClick(Sender: TObject);
var
ErrorCode: integer;
begin
Exec(ExpandConstant('{app}') + '\MyProg.exe',' ', ExpandConstant('{app}'), SW_HIDE, ewNoWait, ErrorCode);
SendMessage(WizardForm.NextButton.handle, $F5, 0, 0);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
if CurPageID=wpFinished then begin
RunEXE := TNewButton.Create(WizardForm);
with RunEXE do
begin
Name := 'RunEXE';
Parent := WizardForm;
Left := ScaleX(104);
Top := ScaleY(328);
Width := ScaleX(120);
Height := ScaleY(23);
Caption := ' ';
OnClick:= @LaunchButtonOnClick;
end;
end;
end;

Как сделать свернуть и закрыть через лейбл.Зарание спасибо...

diman_21Ru
01-02-2014, 16:22
Ivan_009, попрежнему моды ставятся в любую папку (

saurn
01-02-2014, 16:58
Но т.к. папка Assassin's Creed Revelations содержит знак ' (кавычку), то inno setup не понимает что надо удалить эту папку. Как исправить?»
[Setup]
AppName=My Application
AppVersion=1.5
DefaultDirName={pf}\My Application
OutputDir=...


[CustomMessages]
CM_DEL_SAVE=Удалить также сохранения игры и профили игроков, находящиеся в следующем расположении:%n%n


[Code]
#define SaveDir "Assassin''s Creed Revelations"


function DeleteSavedGames(): Boolean;
var
SavingFolderPath: String;
begin
SavingFolderPath := ExpandConstant('{userdocs}\{#SaveDir}');
Result := DirExists(SavingFolderPath);
if not Result then Exit;
case MsgBox(CustomMessage('CM_DEL_SAVE') + AddQuotes(SavingFolderPath), mbConfirmation, MB_YESNO) of
6: DelTree(SavingFolderPath, True, True, True);
end;
end;


procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
begin
case CurUninstallStep of
usPostUninstall: DeleteSavedGames();
end;
end;

Nightwishh
01-02-2014, 20:29
Всем добрый вечер. Хочу спросить:
1) Можно ли сделать объект WizardForm.InfoBeforeMemo без заднего фона (т.е. прозрачным) (без ботвы) и если нет, то какой объект можно взять вместо него у которого есть прозрачность и скроллбар?
2) Чем отличается SendMessage(WizardForm.CancelButton.Handle, $00F5, 0, 0); от WizardForm.Close и что лучше?
3) С чем связана ошибка Память не может быть read. Появляется она один раз после установки когда нажимаешь на кнопку заершить и больше она не появляется, хоть сто раз устанавливай.
Спасибо!!!

diman_21Ru
01-02-2014, 21:01
Всем привет можно ли как у Jove в мод-паке сделать выбираешь папку с игрой если найдет ярлык игры то моды ставятся именно туда , зарание спасибо

Tco 03
02-02-2014, 08:08
Всем привет.
Кому не сложно подскажите, пожалуйста, какой код отвечает за фунцию вывода сообщений: "Вы действительно хотите удалить..." и "...полностью удалена с Вашего копьютера"

dr.alexa2000@vk
02-02-2014, 09:02
saurn
Не получилось, прикрепил весь скрипт к сообщению,исправьте,пожалуйста...
Ваш код я вставил на 1420 строке.

saurn
02-02-2014, 09:40
Не получилось »
Процедура CurUninstallStepChanged была объявлена дважды. Скрипт во вложении.

Ivan_009
02-02-2014, 11:15
Почему шрифт отображается на разных системах поразному? Как добиться идентичности отображения...
P.S Шрифт был использован "Trebuchet MS" тест на Win 7 и Win XP...

diman_21Ru
02-02-2014, 11:16
ответьте пожалуйста на мой вопрос кто знает , очень нужна 'та функция что писал выше, зарание спасибо

Ivan_009
02-02-2014, 11:30
diman_21Ru, Через реестр так:

[Setup]
AppName=MyApp
AppverName=MyApp
DefaultDirName={pf}\MyApp

[Registry]
Root: HKLM; Subkey: SOFTWARE\MyApp; ValueName: InstallPath; ValueType: string; ValueData: {app}; Flags: uninsdeletekey

[code]
function InitializeSetup(): Boolean;
begin
Result:= True;
if RegValueExists(HKLM, 'SOFTWARE\MyApp', 'InstallPath') then begin
MsgBox('Копия данной программы уже установлена! Установка будет прекращена', mbConfirmation, MB_OK);
Result:= False;
end;
end;




© OSzone.net 2001-2012