Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> InnoSetup, Тихая установка 
:(
    Опции темы
kemiisto
Дата 6.2.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



Код

function ReadPath(Param: String): String;
var
  S: TArrayOfString;
  F: String;
begin
  F := Dir + '\setup';
  LoadStringsFromFile(F, S);
  Result := S[0];
end;




Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  semiono.rar 3,92 Kb


--------------------
PM MAIL WWW GTalk Jabber   Вверх
semiono
Дата 6.2.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Я вроде ранше говорил, что файл 'setup' может не существовать.

...
begin
  F := Dir + '\setup';
  if not FileExists(F) then
    Exit;
 - не помагло!
  LoadStringsFromFile(F, S);
  Result := S[0];
end;
видимо из за этого:
function InitializeSetup(): Boolean;
begin
...

Я имел ввиду, то что в директории мы имеем некий "тихий" инсталлер setup.exe и всё.
Но вот например, у юзера возникло желание изменить путь установки.
И тогда пользователь сам создаёт в той же директории рядом с setup.exe файлик setup
и вписывает туда свой путь.
Изначально setup.exe один.
smile

это типа тайная фитча будет  smile 

Это сообщение отредактировал(а) semiono - 6.2.2008, 15:00
PM MAIL ICQ Jabber   Вверх
kemiisto
Дата 6.2.2008, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



Цитата
 
if not FileExists(F) then
  Exit; - не помагло!

А поподробнее?

Цитата
 рядом с setup.exe файлик setup 

Если я правильно понял, то при отсутствии этого файлика, установка должна происходить в некую папку по умолчанию (например, C:\Program Files\Default VST\).

Тогда так:
Код

function ReadPath(Param: String): String;
var
  S: TArrayOfString;
  F: String;
begin
  F := Dir + '\setup';
  if not FileExists(F) then
    Result := 'C:\Program Files\Default VST\'
  else
  begin
    LoadStringsFromFile(F, S);
    Result := S[0];
  end;
end;





--------------------
PM MAIL WWW GTalk Jabber   Вверх
semiono
Дата 6.2.2008, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Только у меня вопрос тогда

[Files]
DefaultDirName={code:ReadPath|DefaultPath} ; может здесь тогда просто {app}

[Files]
DestDir: {code:ReadPath|DefaultPath}... ; или тут {app}

или везде надо указать подробно {code:ReadPath|DefaultPath}

ой, хотя я кажись понял, сам код уже выдаёт {code:ReadPath} что уже достаточно!

Да, вроде так и есть! Я туплю )
PM MAIL ICQ Jabber   Вверх
semiono
Дата 15.2.2008, 03:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Имеется, собрал! С Вашей помощью!
Я придумал теперь даже круче! Указательный файл должен лежать на системном диске.
Чтобы была возможность инсталлировать с cdrom, ну и вообще так симпотишней  smile 

[Setup]
AppName=N__ndo
AppVerName=N__ndo 2.2.0.39
DefaultDirName={code:GetPath}
DirExistsWarning=no
DisableDirPage=yes
DisableProgramGroupPage=yes
ArchitecturesInstallIn64BitMode=x64
Compression=lzma
SolidCompression=yes
OutputDir=D:\
OutputBaseFilename=N__ndo
TouchDate=2001-01-01
TouchTime=00:00
MinVersion=4.1,4.0
VersionInfoCompany=S__iono
VersionInfoCopyright=(С) 2001-2005 GmbH
VersionInfoDescription=N__ndo
VersionInfoTextVersion=2.2.0.39
VersionInfoVersion=2.2.0.39
Uninstallable=no
UsePreviousAppDir=no
SetupIconFile=.\patch\N__ndo.ico
WizardImageFile=.\patch\N__ndo.bmp

[Messages]
BeveledLabel= ~

[code]
var
  Dir: String;
function GetPath(Param: String): String;
var
  S: TArrayOfString;
  F: String;
begin
  F := Dir + 'n__ndo';
  if not FileExists(F) then
    Result := ExpandConstant('{pf}\N__ndo')
  else
  begin
  LoadStringsFromFile(F, S);
  Result := S[0];
  end;
end;

function InitializeSetup(): Boolean;
begin
  Dir := ExpandConstant('{sd}\');
  Result := True;
end;

procedure DeinitializeSetup();
var
  S: TArrayOfString;
  F: String;
begin
  F := ExpandConstant('{sys}\n__ndo.cmd'); // я заменил - F:= {sys}'n__ndo.cmd' интересно какой вар. лучше?
  SetArrayLength(S, 4);
  S[0] := '@if "%1"=="-h" start n__ndo.chm & goto nop';
  S[1] := '@if "%1"=="-help" start n__ndo.chm & goto nop';
  S[2] := '@start ' + ExpandConstant('{code:GetPath}') + '\N__ndo.exe %2';
  S[3] := ':nop';
  SaveStringsToFile(F, S, False);
end;

[Dirs]
// ставим ro на папки, чтоб потом иконки работали через desktop.ini =)
Name: "{code:GetPath}"; Attribs: readonly; Flags: uninsneveruninstall; Permissions: admins-full
Name: "{reg:HKLM\Software\VST,VSTPluginsPath|{sys}\Plugins}"; Attribs: readonly; Flags: uninsneveruninstall; Permissions: admins-full

[Icons]
Name: "{userprograms}\N__ndo"; Filename: "{code:GetPath}\N__ndo.exe"; WorkingDir: "{code:GetPath}"; IconIndex: 0; Comment: "N__ndo"
Name: "{userfavorites}\N__ndo"; Filename: "{code:GetPath}\N__ndo.exe"; WorkingDir: "{code:GetPath}"; IconIndex: 0; Comment: "N__ndo"
Name: "{sendto}\N__ndo"; Filename: "{code:GetPath}\N__ndo.exe"; WorkingDir: "{code:GetPath}"; IconIndex: 0; Comment: "N__ndo"

[Registry]
; Winlogon
Root: HKLM; Subkey: "Software\Microsoft\Windows NT\CurrentVersion\Winlogon"; ValueType: dword; ValueName: "SFCDisable"; ValueData: "$ffffff9d"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Microsoft\Windows NT\CurrentVersion\Winlogon"; ValueType: dword; ValueName: "SfcQuota"; ValueData: "$00000000"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Microsoft\Windows NT\CurrentVersion\Winlogon"; ValueType: dword; ValueName: "SFCScan"; ValueData: "$00000000"; Flags: noerror; Permissions: admins-full
; Computer
Root: HKLM; Subkey: "Software\Classes\CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\N__ndo"; ValueType: string; ValueName: ""; ValueData: "&N__ndo"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Classes\CLSID\{{20D04FE0-3AEA-1069-A2D8-08002B30309D}\shell\N__ndo\command"; ValueType: string; ValueName: ""; ValueData: "{code:GetPath}\N__ndo.exe"; Flags: noerror; Permissions: admins-full
; Run
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\N__ndo.exe"; ValueType: string; ValueName: ""; ValueData: "{code:GetPath}\N__ndo.exe"; Flags: noerror; Permissions: admins-full
Root: HKLM; Subkey: "Software\Microsoft\Windows\CurrentVersion\App Paths\N__ndo.exe"; ValueType: string; ValueName: "Path"; ValueData: "{code:GetPath}"; Flags: noerror; Permissions: admins-full
...



Это сообщение отредактировал(а) semiono - 15.2.2008, 17:40
PM MAIL ICQ Jabber   Вверх
semiono
Дата 15.2.2008, 04:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Ещё один подсказ нужен...
Как файл переименовать/удалить и т.д.
Например, нужно установить HHCtrl.ocx свой патченный.
~install after rebout  из Inno не пойдёт, потому-что на некоторых десктопах, скажем у меня
нету explorer.exe А INNO видимо когда пытается shutdown запустить ищет его...
Вообщем виснет - не перегружается!
Я так думаю надо просто файлик переименовать и свой на его место положить.
А тут кстати shell32.dll тоже заменить планируется...
Я так думаю надо из инсталлера как-то сделать shell32.dll -> shell32.bak
???
Таких примеров много ещё, например, я даже не уверен как в WinRar RarExt.dll заменить,
он даже не regserver установка! Но с WinRar это особый случай...


Это сообщение отредактировал(а) semiono - 15.2.2008, 04:41
PM MAIL ICQ Jabber   Вверх
kemiisto
Дата 16.2.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



Цитата(semiono @  15.2.2008,  04:39 Найти цитируемый пост)
Ещё один подсказ нужен...

Это пожалуйста!

Цитата(semiono @  15.2.2008,  04:39 Найти цитируемый пост)
Как файл переименовать/удалить и т.д.

Код
function DeleteFile(const FileName: string): Boolean;

Удаляет файл FileName. Если файл не может быть удален или не существует, функция вернет False.

Код
function RenameFile(const OldName, NewName: string): Boolean;

Пытается изменить имя файла или папки с OldFile на NewFile. Если удасться, вернет True. Елси не сможет переименовать (например, файл NewName уже существует), вернет False.

Код
function FileCopy(const ExistingFile, NewFile: String; const FailIfExists: Boolean): Boolean;

Копирует файл ExistingFile в NewFile, сохраняя отметку времени и аттрибуты. Если FailIfExists равно True и NewFile существует, ,то копирование не выполнится, иначе файл будет перезаписан. Возвращает True при успешном копировании, в противном случае - False .

Цитата(semiono @  15.2.2008,  04:39 Найти цитируемый пост)

А тут кстати shell32.dll тоже заменить планируется...
Я так думаю надо из инсталлера как-то сделать shell32.dll -> shell32.bak
???

Видимо, да. Нужно сделать что-то типа (пишу без путей и проверки успешности операций):
Код

RenameFile('shell32.dll', 'shell32.bak');
FileCopy('myshell.dll', 'shell32.dll', False);

Тогда при следующей перезагрузки будет задействована модифицированная dll.





--------------------
PM MAIL WWW GTalk Jabber   Вверх
semiono
Дата 27.2.2008, 01:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



1. Нужно переименовать файл, или Exit если он не существует. C:\zzzz
2. Нужно удалить файл, или Exit если он не существует. C:\zzzz
К сожалению я не справился ни с чем, так как я не понимаю что делать с функциями.
Для меня то что возвращает функция, к сожалению пустой звук.
Не доходит до меня "делфи" хоть задушится! Когда код написан, я его ещё могу прочесть,
но сам сколько не пытался не получилось. :(
Приходится опять выпрашивать готовый кусок скрипта.
function DeleteFile(const FileName: string): Boolean;
var
F := ExpandConstant('C:\zzzz') : string
begin
Result := True
end;
 smile  smile 
Кстати всякие куски кода делфи с нета тоже не удаётся привинтить, так как InnoSetup не имеет
всех возможностей языка...
Но главное что меня убивает, это то что неужели никто не удалял никогда, не переименовывал
ничего, уже час гуглю и какая-то скудная информация...! Чего только не было, лишь бы не это!

Это сообщение отредактировал(а) semiono - 27.2.2008, 01:24
PM MAIL ICQ Jabber   Вверх
kemiisto
Дата 4.3.2008, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 2
Всего: 160



semiono, извини, что долго не отвечал. Давненько я здесь не был....

Насколько я понял, ты немножко путаешь 2 вещи:
  • обработчики событий (Event Functions);
  • поддерживаемые функции (Support Functions).

Если коротко, то в коде первых (который пишешь ТЫ) можно использовать вызовы вторых (они УЖЕ описаны).

Например, если при завершении установки мне нужно удалить какой-то файл я должен написать следующее:
Код

procedure DeinitializeSetup();
begin
  DeleteFile('C:\file.ext');
end;

Этого в принципе достаточно, но здесь нет проверки на корректность удаления.

С другой стороны DeleteFile - функция, она возвращает значение:
Код

function DeleteFile(const FileName: string): Boolean;

Удаляет файл FileName. Если файл не может быть удален или не существует, функция вернет False.

С проверкой на корректность удаления будет что-то типа:
Код

procedure DeinitializeSetup();
begin
  if DeleteFile('C:\file.ext') then
    //файл успешно удален
  else
    //файл не может быть удален или не существует;
end;



--------------------
PM MAIL WWW GTalk Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0752 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.