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

Поиск:

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


Новичок



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

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



Помогите с IS установкой!
Мне нужно считать путь в реестре
HKLM\Software\VST\VSTPluginsPath="путь"
и установить в него сабж в тихом режиме.
Ниодной подходящей функции не нашёл - GetEnv, GetIniBool, GetSystemDir...
 smile 

PM MAIL ICQ Jabber   Вверх
kemiisto
Дата 31.12.2007, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



А что секция [Registry] разве не обрабатывается во время Silent Install?


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


Бывалый
*


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

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



RegQueryStringValue - считывает нужное тебе значение в переменную, а потом в секции [Files] пишешь:
DestDir: {code:getpath|''} где getpath функция возвращающая это значение
--------------------
пьяный русский кодер практически непобедим
PM MAIL   Вверх
semiono
Дата 31.12.2007, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Insert, а можно всю процедуру подробно написать тут? Ато не разберусь, хотя и буду пытаться :(

Мне ещё вот что подсказали, возможно и подойдёт для мну тоже:
Код

[Files]
Source: "file.exe"; DestDir: "{reg:HKLM\Software\VST,VSTPluginsPath|DefaultValue}"

Но конечно чем больше информации тем лучше smile

Приходится изучать паскаль налету, на глубокое изучения меня не хватает...
А без Pascal в Inno тоже туго

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


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



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

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



semiono, тебе подсказали очень не плохой вариант!

В секции [Files] в строке типа

Source: "MYPROG.EXE"; DestDir: "{app}"

можно использовать различные константы (здесь, например, использована {app} - папка, в которую пользователь захотел установить прогу). 

Есть среди них (оказывается  smile ) и {reg:HKxx\SubkeyName,ValueName|DefaultValue}. Синтаксис, кажется понятен, понятен, да и в справке описан подробно. (Constants, ближе к концу).

Добавлено через 13 минут и 28 секунд
Ну а ежели б такой константы не было, пришлось бы создать свою (scripted constant).

В отличие от обычных констант они обозначаются с использованием слова code. Синтаксис объявления такой константы следующий: 

{code:FunctionName|Param} 

где: 
FunctionName – имя вызываемой функции; 
Param – строковый параметр, который передается вызываемой функции. Если он будет опущен, вызываемой функции будет передана пустая строка;

Итак, в секции [Files] пишешь:

Source: "file.exe"; DestDir: "{code:MyConst}" 

А в секции [Code] опишем функцию MyConst: 

function MyConst: String;
begin
  RegQueryStringValue(HKLM, 'Software\VST\', 'VSTPluginsPath', Result);
end; 

Видимо, Insert имел ввиду нечто подобное. 


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


Новичок



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

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



Видимо я добрался до самого страшного :\
Нужно указать путь во внешнем файле после установки. Боюсь, что IS этого вообще не может.
Скажем после инсталла имеем C:\zzz\Preference.xml
************************************
<?xml version="1.0" standalone="yes" ?>
<ArtsAcousticReverbPreference Version="1">
<UserPath>???</UserPath>
<PresetPath>???</PresetPath>
</ArtsAcousticReverbPreference>
*************************************
В котором нужно вписать UserPath и PresetPath

И ещё хотелось бы управлять бездиалоговым инсталлером файлом извне, напр.
C:\MyProg.exe - при установке изменяет путь {app}
на тот который указан в
C:\FILE.txt
или INI какойнибуть...
0_o
PM MAIL ICQ Jabber   Вверх
kemiisto
Дата 6.1.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Цитата
Боюсь, что IS этого вообще не может.
 Ключевое слово - боюсь! Все он может!
Вот так например можно отредактировать твой xml. В конце концов - это обычный набор строк!

Код

procedure DeinitializeSetup();
var
  S: TArrayOfString;
  F: String;
begin
  F := 'C:\zzz\Preference.xml';

  if not FileExists(F) then
    Exit;
    
  LoadStringsFromFile(F, S);
  S[2] := '<UserPath>' + 'something' + '</UserPath>';
  S[3] := '<PresetPath>' + 'something' + '</PresetPath>';
  SaveStringsToFile(F, S, False);
end;


Добавлено через 1 минуту и 48 секунд
А вот дальше я чего-то не понял!
Цитата

И ещё хотелось бы управлять бездиалоговым инсталлером файлом извне, напр.
C:\MyProg.exe - при установке изменяет путь {app}
на тот который указан в
C:\FILE.txt
или INI какойнибуть...


Чуть поподробнее опиши, будь добр! 


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


Новичок



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

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



Невероятно! 0_o
Работает!  smile 
Но почему я когда хелп читаю нифига там не нахожу. Впринцыпе моя проблемма, это ж сначала гуру надо быть в паскале!

kemiisto
с вторым вопросом всё просто, это тоже что и с реестром было

[Files]
Source: "file.exe"; DestDir: "{reg:HKLM\Software\VST,VSTPluginsPath|DefaultValue}"

только в этом случае нужно реестр заменить на файл какогонибудь типа (txt/ini/xml/bat)
лучше конечно ini или просто безформатный текст-файл без расширения

Смысл таков. Я не хочу включать диалоги в инсталлер вообще никакие. Но иногда
может оказаться что нужно изменить путь установки. Поэтому для аварийного
случая инсталлер должен иметь строку "аварийной-запасной установки" которую
он сможет считать из руководящего внешнего файлика.

Типа написал текст-инструкцию, положил рядом с инсталлером и он последовал
этой Unattended-установки.

PM MAIL ICQ Jabber   Вверх
kemiisto
Дата 6.1.2008, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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



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

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



Инструкцию я бы оформил в виде ini-файла. А потом при инициализации инсталляции считывал бы нужные значения.

Вот пример: 

 

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


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


Новичок



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

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



Я только скачал, а вот здесь
Source: "MyDll.dll"; DestDir: {code:ReadPath}
можно наверное DestDir: {code:ReadPath|Default} как и ранее использовать?...

По ходу дела там ещё возникло, когда XML правил... а нельзя пробел вписывать?
Ибо в XML красивее так было smile

<ArtsAcousticReverbPreference Version="1">
пробел<UserPath>???</UserPath>
пробел<PresetPath>???</PresetPath>

вернее здесь даже Tab-отступы

offtop:
Собсно мы тут подошли к вопросу о том, как букву в "дампе" текста изменить )))
мало пригодно, но всёж интересно теоретически?
[S:n] - это стринги я так понял, а как тогда Rows указать?

kemiisto, спасибо тебе!
Насчёт INI это верно, я вообще любитель INF/INI, XML - это более модно...

Надо мне будет поиграться потом с функциями чтоб закрепить материал...
Я чё-то такой влюблённый стал в InnoSetup, ранее всё мечтал освоить какойнить "язык",
оказалось что IS самый любимый IDE стал для мну! С одной стороны практически полезный,
с другой, действительно возможности при таком маленьком пакете просто поражают!
smile

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


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



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

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



По поводу отступов в XML. Теоретически я бы так вот написал:

Код

S[2] := ' <UserPath>' + 'something' + '</UserPath>';
S[3] := ' <PresetPath>' + 'something' + '</PresetPath>'; 


Но почему то не работает  smile Вроде #9 - символ табуляции! Но  в итоге пришлось тупо вставить пробел вместо 

Код

S[2] := ' <UserPath>' + 'something' + '</UserPath>';
S[3] := ' <PresetPath>' + 'something' + '</PresetPath>'; 


Вот так вот! 

P.S. Я в XML не очень то разбираюсь, возможно ошибся!

Добавлено через 2 минуты и 2 секунды
В первом образце кода вместо пробела стоит   но html переформатировал!

Ща еще ращок попробую
  S[2] := ' <UserPath>' + 'something' + '</UserPath>';
  S[3] := ' <PresetPath>' + 'something' + '</PresetPath>';

Добавлено через 3 минуты и 25 секунд
Вот блин, незадача!
Тогда вот так:


Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  setup.iss 1,35 Kb


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


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

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



Цитата(kemiisto @  6.1.2008,  12:51 Найти цитируемый пост)
Ключевое слово - боюсь! Все он может!
Кстати да. Хоче только сделать небольшое дополнение: что не может Inno своими штатными средствами (такого мало, но все же есть) он может с помощью библиотек. Т.е. пишем библиотеку (dll) на любом языке (Delphi, C++ и т.п.), потом в [code] подключаем библиотеку и используем в ней нужную функцию.



--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
semiono
Дата 4.2.2008, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нужно создать "новый" файл
{sys}\nuendo.cmd
и вписать в него
Код

@if "%1"=="-h" start nuendo.chm & goto nop
@if "%1"=="-help" start nuendo.chm & goto nop
@start {app}\nuendo.exe %2
:nop

где {app} переменная в InnoSetup!

~
Что то опыт со стрингами, что раньше было мне не помог.
Вопервых, не знаю как пустой файл создать...
Хотя если положить файлик и наполнить строками, то   LoadStringsFromFile(F, S); итд. можно.
Но ведь хочется упростить, чтоб было разумно.

И моя старая фитча тут тоже не прокатила видимо из-за каких-то спец.-слов/символов

[Run]
Filename: "{tmp}\system.cmd"; Parameters: "{app}"
Батник:
Код

echo @if "%%1"=="-h" start nuendo.chm & goto nop> %SystemRoot%\system32\nuendo.cmd
echo @if "%%1"=="-help" start nuendo.chm & goto nop>> %SystemRoot%\system32\nuendo.cmd
echo @start %1\Nuendo.exe %%2>> %SystemRoot%\system32\nuendo.cmd
echo :nop>> %SystemRoot%\system32\nuendo.cmd

smile
?

Вообще-то проблемма только в том как создать файл. Я полазил по хелпу и походу там нету
CreateFile MakeFile или ещё чего. Хотя в Паскале наверняка есть.

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


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



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

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



Ну вот так, например:

Код

procedure DeinitializeSetup();
var
  S: TArrayOfString;
  F: String;
begin
  F := {sys}'nuendo.cmd';
  SetArrayLength(S, 4);
  S[0] := '@if "%1"=="-h" start nuendo.chm & goto nop';
  S[1] := '@if "%1"=="-help" start nuendo.chm & goto nop';
  S[2] := '@start ' + ExpandConstant('{app}') + '\nuendo.exe %2';
  S[3] := ':nop';
  SaveStringsToFile(F, S, False);
end;



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


Новичок



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

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



Возвращаясь к пройденному smile
Цитата(kemiisto @ 6.1.2008,  20:26)
Инструкцию я бы оформил в виде ini-файла. А потом при инициализации инсталляции считывал бы нужные значения.


Но нельзяль иметь дело c не INI файлом, а  вот так

{src}\file  (8.1 - без расширения) в ктором юзер может сам написать по желанию:

путь сразу без всяких секций сразу с первой строки? ( Просто как S[0] := )
--------------- [file]
E:\Progra~1\zzz...\aaa
---------------EOF

То-есть файл неопределённого типа, и без оформления...
Типа считать нулевую строку из файла и всё!

Дело в том что для этой цели ini-файл мне кажется избыточным, так как сама задача более
примитивная. Хотя всё итак работает замечательно, просто хотелось бы решить
проблемму более "красиво" ;)

kemiisto, большое спасибо!

PS. наверное из стандартных функций более удобно общатся с INI форматом,
а то что я спросил видимо нужно уже кодить как-то более мудрённо...
Но результат всёж лучше должен оказаться если считывать стрингс вместо секций...
Хотя у меня не получилось самому собрать такую процедуру )

Напомню навсякий случай, что нужно из внешнего файла если он существует считать альтернативный путь установки.

Это сообщение отредактировал(а) semiono - 6.2.2008, 00:55
PM MAIL ICQ Jabber   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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