Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Наборы обновлений для Windows XP/2003/Windows 7 (http://forum.oszone.net/forumdisplay.php?f=62)
-   -   Несколько вопросов по .INF (http://forum.oszone.net/showthread.php?t=82292)

VitRom 09-04-2007 08:37 571765

Несколько вопросов по .INF
 
1. INF с секцией OptionalComponents.

Как быстрее и проще адаптировать его для установки вручную (контекстное меню - установить)?

Можно ли просто скопировать содержимое секции в DefaultInstall?
А можно ли как-то "сослаться" из DefaultInstall на OptionalComponents (или наоборот)?

2. INF вносит данные в HKCU.

Как обеспечить внесение этих данных для каждого нового юзера (при первом логине)?

Как обеспечить удаление этих данных при первом входе каждого юзера после деинсталяции программы?

VitRom 26-04-2007 07:56 579674

придётся попробовать поднять тему :(

Вышеперечисленное абсолютно необходимо для полноценного использования "истинно многопользовательской" системы

Vadikan 26-04-2007 08:05 579677

Цитата:

INF вносит данные в HKCU.
Не может быть :) Вы читали Руководство по работе с INF-файлами
Цитата:

Как обеспечить внесение этих данных для каждого нового юзера (при первом логине)?
Не знаю, как с INFами, но где-то я публиковал CMD файл, импортирующий через regedit http://forum.oszone.net/post-404318-36.html?

VitRom 26-04-2007 09:10 579695

Эх, надо было просто поднять... Старой версии не осталось, а там специально в первой же строке было сказано, что, мол, и то-то читал, и там-то линки из шапки посетил и т.п. :) И вопросы там были разжёваны, а тут сократил до предела

"INF вносит данные" в куда я ему скажу, в пределах реестра, разумеется - AddReg blah-blah. :)
А тот же HKCU может пригодиться для работы софта (какой на это способен) сразу после установки.
Но если юзеров несколько, что делать с другими, и с Default User profile (не HKU\.DEFAUL)?

Как вариант возможно внесение необходимых данных и текущему юзеру после перелогина.
Но тогда это всё равно сводится к вопросу "а как сделать для каждого при первом входе".

В "Руководстве" же как раз те места, которые нужны ("более подробно в описании того-то") пусты. :(

Есть подозрение, что можно заюзать AdvancedINF-2 PerUserInstall, но как правильно?
Что значит "PerUserInstall=Имя единственной дочерней секции"?
Сделать, что-ли, вроде
Код:

[DefaultInstall]
AddReg=AddUserReg
PerUserInstall=ThisPerUserInstall
[ThisPerUserInstall]
rundll32.exe advpack,LaunchINFSection C:\Script.inf,AddUserReg

Но тогда под текущим юзером это, похоже, отработает дважды?
И как тогда насчёт PerUserUNInstall?

CMD хороший, просто и со вкусом, хотя всё-таки это изврат.
В идеале нужно то же поведение, которое можно было видеть после установки некоторых старых МС-вских продуктов - например, ИЕ 4 или 4.5. Т.е. во время первого после установки входа в систему (для каждого юзера) десктоп не показывался сразу, а вместо этого висел месседж типа "обновление конфигурации" или что-то такое, ставились ярлычки, что-то регистрилось и т.д. и т.п.

Petya V4sechkin 26-04-2007 16:12 579940

VitRom
Цитата:

1. INF с секцией OptionalComponents.

Как быстрее и проще адаптировать его для установки вручную (контекстное меню - установить)?

Можно ли просто скопировать содержимое секции в DefaultInstall?
А можно ли как-то "сослаться" из DefaultInstall на OptionalComponents (или наоборот)?
Аналогичные темы, возможно, там чего-нибудь полезное для себя найдешь:
http://forum.oszone.net/thread-82861.html
http://forum.oszone.net/thread-79336.html


VitRom 27-04-2007 00:41 580129

Petya V4sechkin, спасибо, поиском х.. бы нашёл. В посте 8 есть 90% ответа на мой 1-й вопрос. Неясной осталась лишь допустимость "наглой" ссылки на другую главную секцию.

И самое главное осталось - "Per-Every-User-(un)install"

Petya V4sechkin 27-04-2007 10:52 580272

VitRom
Насчет PerUserInstall подсказать не смогу (не использовал), поищи в доках. Главное - не забудь, что по правой кнопке мыши на inf-файле вызывается обычный setupapi.dll.

VitRom 27-04-2007 11:29 580291

Petya V4sechkin, вся беда в том, что я уже искал, и не только там.
Всё, что попадается - только долбаный ДДК или его производные.
Или вообще ничего: http://search.msdn.microsoft.com/sea...PerUserInstall
Цитата:

Извините, невозможно найти результаты, содержащие PerUserInstall

Советы по поиску
Поробуйте упростить сложные или слишком подробные запросы.
Правда, что тут ещё упрощать - я не знаю.

Цитата:

по правой кнопке мыши вызывается setupapi.dll
Спасибо, что подсказал. Хотя лучше бы знать, откуда это можно взять самому (читать-то я умею, в школе научили - было б что - вообще б без вопросов обошёлся).

Получается, использовать AdvancedInf в шелле я могу только прямой командой? Или AddReg в HKCU\runonce и перелогин?

Petya V4sechkin 27-04-2007 11:44 580302

VitRom
Цитата:

Спасибо, что подсказал. Хотя лучше бы знать, откуда это можно взять самому
Это в реестре, раздел HKEY_CLASSES_ROOT\inffile\shell\Install. Собственно, по аналогии можно создать еще один пункт для установки с помощью advpack.dll. Или батником вызывать.

В принципе, для проверки выполнения из sysoc.inf можно попробовать тоже батником, типа как здесь.

VitRom 27-04-2007 12:09 580311

Я имел в виду не "где посмотреть ассоциацию", :)
а "где брать аналогичную информацию" в применении к "стандартной" (нетвиканной) Винде.

Или подобные особенности вообще нигде не документированы, :o
и то, чем со мной поделились - результат именно того, что кому-то когда-то после долгого траха пришлось-таки самому смотреть реестр?

ЗЫ. В налево и направо склоняемом МСДН у меня лично всегда получалось найти только разные варианты долбаного ДДК, и всё.

Petya V4sechkin 27-04-2007 12:24 580315

VitRom
Ну ты просто залез в такие дебри, в которые здесь никто еще не залезал :)
Может, не надо усложнять (Uninstall для каждого юзера), какая в этом реальная необходимость? Если у кого-то что-то в ветке HKCU и останется, особой проблемы в этом не вижу.

Да и Install тоже в большинстве случаев делают до первого логона, а там, сам понимаешь, все изменения HKCU вносятся в Default-профиль.

dimich22 27-04-2007 15:03 580388

Раз уж тут появилась отдельная тема, то задам свой вопрос здесь.
Проявилась у меня одна проблема с регистрацией библиотеки из inf файла. Т.е. я все хочу довести до ума аддон findexer, но пока не получается. Смысл в чем: для появления панели findexer требуется зарегистрировать одну библиотеку, но findexer также требует еще vcredist2005 Так вот, если при создании аддона через sysoc.inf в инфе прописать секцию registerdll, то ничего не происходит - findexer не работает. Решил пойти другим путем - добавить в реестр в секцию runonce запуск батника с регистрацией библиотеки, но что меня поразило - runonce отрабатывает в этом случае на t13. Имя запускающему файлу дал z_fnd.cmd - специально, чтобы отрабатывался после vcredist.exe Но, в голову пришла сейчас мысль - м.б. он все равно отрабатывается позже? и надо тогда тоже создать самораспаковывающийся архив z_fnd.exe?

P.S. Спасибо DJ Electronic за поддержку, тестирование и несколько дельных мыслей по этому поводу.
P.P.S. Аддон, собранный методом svcpack отрабатывает на ура - проверено и реализовано DJ Electronic. Но хочется все-таки решить вопрос с методом sysoc.inf

Petya V4sechkin 27-04-2007 15:19 580398

dimich22
Цитата:

Решил пойти другим путем - добавить в реестр в секцию runonce запуск батника с регистрацией библиотеки, но что меня поразило - runonce отрабатывает в этом случае на t13.
Да. Причем до выполнения Svcpack.

Цитата:

и надо тогда тоже создать самораспаковывающийся архив z_fnd.exe?
Можно так.
Другой способ - перенос выполнения на RunOnce после первого логона. Пример в аддоне 1-MU (для этого надо использовать advpack.dll, а RegisterDlls приходится заменять на RegisterOCXs).

dimich22 27-04-2007 16:06 580421

Цитата:

RegisterDlls приходится заменять на RegisterOCXs).
А почему приходится? И в чем получается принципиальная разница. Просмотрев руководства, так и не понял.

Petya V4sechkin 27-04-2007 17:05 580447

dimich22
Не знаю, у меня при выполнении inf-файлов с помощью advpack.dll почему-то не работала секция RegisterDlls.

dimich22 27-04-2007 18:08 580475

Может, я что не так делаю, но у меня при такой строчке в inf-файле
Код:

HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce","FindeXer_inf",0x20000,"%SystemRoot%\System32\rundll32.exe advpack.dll,LaunchINFSection %17%\wee.inf,RunOnceInst,0"
все равно регистрация библиотеки происходит на T13

Petya V4sechkin 27-04-2007 19:59 580524

dimich22
Дык, два раза надо ;) В RunOnceInst второй такой же фокус.

dimich22 27-04-2007 20:34 580539

Можно поподробнее, для тупых :wink: А то что-то я торможу. Т.е. в этой строчке я ссылаюсь на RunOnceInst, а в ней я не регистрирую библиотеку, а опять пишу ту же строчку, только, например, со ссылкой на RunOnceInst1 и там только прописываю RegisterOcx? Я пытался проделать тот же маневр, но через батник, но не получилось.

Petya V4sechkin 27-04-2007 20:37 580541

dimich22
Да, примерно так.
Не знаю, почему у тебя не получилось через батник :)

dimich22 27-04-2007 20:50 580547

Я завтра попробую и отпишусь. Через батник пробовал так: в инфе прописывал запуск батника через runonce, в котором в свою очередь добавлялся запуск другого батника через runonce. Так вот, второй батник запускался практически сразу же, т.е. на T13.

dimich22 28-04-2007 13:44 580814

Petya V4sechkin, спасибо за наводку. Библиотека зарегистрировалась как нужно. Но для этого пришлось не два раза, а три обращаться к runonce. М.б. это зависит от количества аддонов, но я кроме reqired_dll's и своего ничего не ставил. Если прописывать два раза, то второй запуск происходит тоже на 13 минуте, но несколько позже первого - успевают поставиться некоторые вещи из svcpack. Вот когда происходит третий запуск я не отследил. Видимо тоже в районе T13, но после svcpack. Если прописать 4 раза:), то вот тогда похоже, что запуск из runonce происходит при логоне. Оставил пока трехуровневую рекурсию:) Посмотрим, что будет при увеличении числа аддонов.

VitRom 28-04-2007 21:23 580990

Petya V4sechkin
Цитата:

ты просто залез в такие дебри, в которые здесь никто еще не залезал :)
я это уже понял, и что придётся разбираться самому - тоже, поэтому всё, что мне теперь надо - только "нормальные" доки.
Цитата:

Uninstall для каждого юзера, какая в этом реальная необходимость
ну... "порядок на рабочем месте", меньше бардака. :) хотя конечно же это не критично (читать буквально!) - но не больше.
Цитата:

Install тоже в большинстве случаев делают до первого логона
в том то и дело, что это изврат! Я хочу сделать отн. универсальный дистр, с которого можно ставить то, что нужно, т.е. только "по требованию" - аналогично компонентам самой Винды, которые можно ставить/удалять многократно и в любое время.
А "до первого логона" значит, что мне надо сначала ставить систему со всеми аддонами, а потом тут же "лишние" сносить.
Вот этот бред я и хочу избежать.

Vadikan 28-04-2007 23:30 581014

VitRom
INF не всегда наилучший путь. Иногда имеет смысл воспользоваться установщиком типа InnoSetup. Вы же не говорите, какая у вас задача конкретно. Понятно лишь то, что вы хотите непременно решить ее при помощи INF, но почему именно так, неясно.

VitRom 29-04-2007 00:06 581026

Vadikan, повторюсь:
"отн. универсальный дистр, с которого..." и далее по тексту. Всё очень просто. Речь не идёт о чём-нибудь типа "аддон Фотошоп-КС" :)

Существует много программ класса "мастхэв". Одновременно верно и то, что многие из них нужны не всегда. Тот же, например, ВинДежавю - мастхэв, но всё-же кому-то ни разу в жизни не понадобится, а кому-то понадобится, но не сразу. При этом и обновлять её практически ни к чему - сам формат давно устоялся, софтина тоже стабильная. Или тулзы от Русиновича...

ИМХО программы такого рода должны быть доступны конечному юзеру дистра аналогично "компонентам" Винды. Понадобилась - "добавил компонент", и всё. Мне до сих пор не требовались "Службы печати Юникс", но я знаю, что если надо - достаточно открыть менеджер компонент и поставить галку.

При этом многие из этих прог невелики по размерам и почти не требуют инсталяции, и мне претит мысль держать каждую со своим персональным инсталятором, который может быть и в 20 раз больше самой проги, тем более когда движок для инсталяции всё равно уже есть в системе.

А просто закомментить строчку "Modes=1,2,3,4" решает проблему лишь наполовину. Да, софтина не ставится сразу, ждёт, пока не поставишь - но не каждая после установки становится доступна сразу для всех юзеров многоюзерской машины, некоторые работоспособны только под юзером, который ставил.

Vadikan 29-04-2007 01:18 581035

VitRom
Я понял о каких программах речь, но все равно не считаю, что проблему надо решать при помощи INF-файлов и компонентов. Есть более простое решение - $OEM$ папки или единственный SFX с такими програмами. У меня есть папка system32\MyTools, куда идут все подобные утилиты. Я просто добавляю папку в PATH и запускаю программы при нбх из командной строки. А если юзеру нужно
Цитата:

Понадобилась - "добавил компонент", и всё.
, то все сводится к добавлению ярлыка на программу. Щелкаем правой кнопкой мыши на рабочем столе - Создать - Ярлык - имяпрограммы - Ввод. Все!

P.S. Добавление папки в PATH — OSZone.net wiki

jameszero 29-04-2007 14:13 581119

VitRom
Цитата:

Я хочу сделать отн. универсальный дистр, с которого можно ставить то, что нужно, т.е. только "по требованию"
Реализовать это можно не только с помощью установки через менеджер компонентов Windows. Гораздо проще и правильней сделать диск, в автозапуск которого, прописать тот же BS Post Installer или другую аналогичную программу. При таком способе убивается ещё один заяц - независимость от развёрнутой ОС, а в вашем варианте, универсальным диском можно будет пользоваться только на том компьютере, где установлена заточенная под него система.

VitRom 29-04-2007 15:02 581137

Vadikan, jameszero

Ха! Все эти варианты я тоже рассматривал.

Как неоднократно говорилось на форуме и подтверждено практикой, наличие $OEM$ отключает какой-то (не помню уже) функционал "стандартного" дистра, как и наличие "winnt.sif" с данными свыше определённого минимума (где-то я постил результат тестов) отключает, кажется, Рекавери Консоль.
Хотя для себя я тоже давно юзаю "папочку на все случаи" (только C:\SYSTEM и добавляю её первой в Path) с кучей всячины... Хотелось просто сделать ещё лучшее (да знаю, знаю, что это враг хорошего! :))

К моему стыду, до сих пор не дошли руки до БСПИ, хотя уже не раз подумывал о нём. Но всё равно недостатки у этого способа те же:
1) перегруз лишними "персональными" сетап-обертками
и/или
2) опять-таки проблема полноценной установки на "обжитую" многоюзерскую систему

Vadikan 29-04-2007 18:24 581183

VitRom
Цитата:

Как неоднократно говорилось на форуме и подтверждено практикой, наличие $OEM$ отключает какой-то (не помню уже) функционал "стандартного" дистра
Что-то я не припоминаю такого... Ссылки хотелось бы увидеть.
Цитата:

как и наличие "winnt.sif" с данными свыше определённого минимума
Это действительно так.
Цитата:

перегруз лишними "персональными" сетап-обертками
Гм... Это проще, чем INF.
Цитата:

опять-таки проблема полноценной установки на "обжитую" многоюзерскую систему
Ерунда. Пусть вызывают ту же оболочку и из нее устанавливают ПО - просто скопируйте ее на жесткий диск со всем содержимым тогда вместо использования с CD.

В общем, это все оффтоп. Если очень хочется INF, то вперед :)

Petya V4sechkin 29-04-2007 18:53 581191

Vadikan
Цитата:

Что-то я не припоминаю такого... Ссылки хотелось бы увидеть.
Имеется в виду, что при наличии в файле ответов OEMPreinstall=Yes не подхватывается по F6 дискета с драйверами для MassStorage-контроллеров. Конечно, их всегда можно интегрировать в CD, но дистрибутив все-таки становится менее универсальным (скажем, если отдаешь свой диск знакомому, не хочется потом слышать обвинения в криворукости - вот, мол, дрова по F6 не хавает).
Сорри за оффтоп.

VitRom 30-04-2007 03:19 581303

Vadikan, хочется, хочется ИНФ! но РТФМ-ов нет!
А что "Это проще, чем" - то да, проще... До того момента когда начинаешь втискивать это в компакт. :wacko:

ЗЫ. Отец (пингвинятник) и сын:
- Пап, как дискету отформатировать?
- РТФМ!
- [вздыхая] Ман - что? ;)

Master of Magic 08-05-2007 16:54 584512

Цитата:

Цитата Petya V4sechkin
Имеется в виду, что при наличии в файле ответов OEMPreinstall=Yes не подхватывается по F6 дискета с драйверами для MassStorage-контроллеров. Конечно, их всегда можно интегрировать в CD, но дистрибутив все-таки становится менее универсальным (скажем, если отдаешь свой диск знакомому, не хочется потом слышать обвинения в криворукости - вот, мол, дрова по F6 не хавает).

Цитата:

Цитата VitRom
как и наличие "winnt.sif" с данными свыше определённого минимума (где-то я постил результат тестов) отключает, кажется, Рекавери Консоль.

Обе проблемы решается созданием разных файлов setupldr.bin.
Вы лучше объясните как пользоваться PerUserInstall?:
Цитата:

For each ActiveSetup enabled component, this option defines the component's states, version, locale and per-user stubpath under HKLM\Software\microsoft\Active Setup\Installed сomponents\GUID registry key. When the user first time logon after installing the component, the commands pointed by StubPath may be executed if this version of component per-user stub has not been run for the user.

Syntax:

[InstallSection]
PerUserInstall=PerUserInstall
[PerUserInstall]
DisplayName=%WebInteg%
Version=5.0.0311.0
IsInstalled=1
ComponentID=IE4Shell_WIN
GUID={89820200-ECBD-11cf-8B85-00AA005B4395}
Locale=en
StubPath=rundll32.exe advpack.dll,LaunchINFSectionEx %11%\myinst.inf,UserStub,,36

[Strings]
WebInteg = "MyComp Update"

Note:

The StubPath data can be any command line launched by CreateProcess().

Master of Magic 15-05-2007 13:09 587104

Как запускать через inf - RunOnce?

Angel_19 17-05-2007 21:44 588118

INF файл можно установить из командной строки так:
Код:

%SystemRoot%\System32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 Путь к inf файлу
К примеру в Inf файле есть также секция деинсталяции, можно ли выполнить эту секцию (деинсталацию) также из командной строки?

Master of Magic 24-05-2007 22:38 590636

Код:

[DestinationDirs]
D6.Copy=53, Главное меню\Программы\Автозагрузка

Как грамотно записать русский язык в inf, у меня этот код не работает?

jameszero 24-05-2007 22:55 590644

Master of Magic
Так сработает:
Код:

[DestinationDirs]
D6.Copy=53,"Главное меню\Программы\Автозагрузка"


Master of Magic 25-05-2007 14:29 590870

Выложил сюда, мож кому пригодится:
Value Destination Directory
01 SourceDrive:\pathname (the directory from which the INF file was installed)
10 Windows directory;This is equivalent to %windir%.
11 System directory;This is equivalent to %windir%\system32 for NT-based systems, and to %windir%\system for Windows 9x/Me.
12 Drivers directory;This is equivalent to %windir%\system32\drivers for NT-based platforms, and to %windir%\system\IoSubsys on Windows 9x/Me platforms.
17 INF file directory
18 Help directory
20 Fonts directory
21 Viewers directory
23 Color directory (ICM) (not used for installing printer drivers)
24 Root directory of the system disk.;This is the root directory of the disk on which Windows files are installed. For example, if dirid 10 is "C:\winnt", then dirid 24 is "C:\".
25 Shared directory
30 Root directory of the boot disk, also known as "ARC system partition," for NT-based systems. (This might or might not be the same directory as the one represented by dirid 24.)
50 System directory for NT-based operating systems; This is equivalent to %windir%\system (NT-based systems only).
51 Spool directory (not used for installing printer drivers − see Printer Dirids)
52 Spool drivers directory (not used for installing printer drivers)
53 User profile directory
54 Directory where ntldr.exe and osloader.exe are located (NT-based systems only)
55 Print processors directory (not used for installing printer drivers)
-1 Absolute path

Dirid values from 16384 through 32767 are reserved for special shell folders. The following table shows dirid values for these folders.
Value Shell Special Folder
16406 All Users\Start Menu
16407 All Users\Start Menu\Programs
16408 All Users\Start Menu\Programs\Startup
16409 All Users\Desktop
16415 All Users\Favorites
16419 All Users\Application Data
16422 Program Files
16425 %WinDir%\System32 (valid for Microsoft Win32 user-mode applications running under Windows on Windows (WOW64))
16426 Program Files (valid for Win32 user-mode applications running under WOW64)
16427 Program Files\Common
16428 Program Files\Common (valid for Win32 user-mode applications running under WOW64)
16429 All Users\Templates
16430 All Users\Documents

dimich22 25-05-2007 14:48 590878

Вообще-то, если сначала заглянуть в тему "Авторам аддонов" и перейти по предложенным ссылкам, то эти переменные там представлены.

Master of Magic 25-05-2007 14:51 590880

dimich22 если сначала заглянуть в тему "Авторам аддонов" и перейти по предложенным ссылкам, то этих переменных там на русском нет, а на английском есть, не обратил внимания,сорри, попрошу, что бы посты удалили.

dimich22 25-05-2007 15:04 590887

Да, на русском нет. С другой стороны, может и стоит такого рода инфу поместить в более доступное место, чтобы не искать.

DJ Electronic 27-05-2007 11:49 591499

как сделать в inf так чтобы при удалении из установки и удалении програм аддона вначале закрывало процесс а потом деинсталлировало уже корректно?

greg_b 14-06-2007 16:13 599281

Написал несколько инсталяшек через inf-файл и при детальной отладке увидел, что в "Установка компонентов Windows" появляется не только необходимая программа на установку/удаление но и еще пустая иконка без каких-либо записей и описаний. В чем бага? Тип установки sysoc.inf

jameszero 14-06-2007 16:48 599288

greg_b
Посмотри здесь (я там, постом ниже, ответил), а если думаешь, что дело в твоём аддоне, то выложи inf файл из аддона и файл sysoc из него же.

greg_b 14-06-2007 17:06 599294

jameszero - спасибо буду проверять

mbgroot 26-10-2008 20:42 934333

Цитата:

Цитата Master of Magic
-1 Absolute path »

Вот по поводу данного DIR ID есть небольшой вопрос...

В своем аддоне я решил сделать "универсальность" - что бы ставился не только в Program Files, но и куда пользователь захочет (установка на "живую" систему). Все победил, кроме добавления ярлыка. На данный момент имею следующее (насколько я понял синтаксис):
Код:

[DefaultInstall]
ProfileItems                =PROG.AddShortcut1

[PROG.AddShortcut1]
Name                        =%SRTC_NAME%
CmdLine                        =-1,,"%PROG_DIR%\%PROG_1%"
WorkingDir                =-1,"%PROG_DIR%"
SubDir                        ="Утилиты"
InfoTip                        =%PROG_INFO%

[Strings]
SRTC_NAME                ="Everything"
PROG_DIR                ="C:\Program Files\Everything"
PROG_1                        =Everything.exe
PROG_INFO                ="Поисковая система"

При этом ярлык прописывается в Пуск-Все программы-Утилиты, имеет название Everything, верное описание, но вот с директориями - бардак. Путь запуска получается в ярлыке C:\Everything.exe, а Рабочая папка - пусто. Можно ли как-то получить нормальную строку запуска (C:\Program Files\Everything\Everything.exe) и рабочую папку?

Stanner 27-10-2008 20:00 935307

mbgroot, Мне кажется, надо писать PROG_DIR в формате 8.3 - я недавно сталкивался примерно с этим (http://forum.oszone.net/post-928593-298.html, http://forum.oszone.net/post-698634.html#post698634, т.е.
PROG_DIR ="C:\PROGRA~1\EVERYT~1"

mbgroot 27-10-2008 20:45 935365

Цитата:

Цитата Stanner
Мне кажется, надо писать PROG_DIR в формате 8.3 - я недавно сталкивался примерно с этим »

Спасибо, но я имел в виду несколько другое. мне интересен синтаксис записи строки CmdLine, т.е. возможно ли указание на программу, если она лежит не в %ProgramFiles%, а скажем в E:\Programs. DirID 16422 указывает как раз на %ProgramFiles%, а я хочу записать вместо этого как бы пустоту, и указать на другую директорию...
И еще маленький вопрос - имеет ли значение, где стоит PROG_DIR="C:\Program Files\Everything" - в начале списка [Strings] или в его конце?

Stanner 27-10-2008 21:00 935377

mbgroot, так там и не обязательно Program Files - имхо, первым параметром может быть D:\Work, вторым - ProgDirName, а третьим - ProgName.exe - и ярлык должен слепиться. А где стоит строка - не важно.

mbgroot 27-10-2008 21:10 935389

Цитата:

Цитата Stanner
не обязательно Program Files - первым параметром может быть D:\Work, вторым - ProgDirName, а третьим - ProgName.exe - и ярлык должен слепиться. »

Но чет он не слепляется... И вот тут написано:
Цитата:

CmdLine=dirid,[subdir],filename
The dirid specifies a value that identifies the directory in which the command program resides. For example, a dirid of 11 indicates the system directory. The possible dirid values are listed in the description of the dirid value in the DestinationDirs section.
If a subdir string is present, the command program is in a subdirectory of the directory referenced by dirid. The subdir specifies the subdirectory. If no subdir is specified, the program resides in the directory referenced by dirid.
The filename specifies the name of the program associated with the menu item.
Когда я пробую вместо dirid вставить %PROG_DIR%, то при попытке выполнить этот инф система говорит что ошибка в инфе. Т.е. насколько я понял, dirid в этом месте обязательно.

Сейчас заметил, что и с прописыванием в автозапуск такакя же ерунда. Значение PROG_DIR просто не подставляется, как бы оно ничему не равно. Зашел в папку C:\Windows\INF и на своем инфе нажал - Установить. После этого посмотрел реестр - автозапуск прописался корректно, проверил ярлык в пуске - некорректно. Запустил инф на установку еще раз - и ярлык тоже корректно прописался. Хотя я ничего не изменял - просто запускал... Ничче не понимаю...

Stanner 27-10-2008 21:20 935397

Тогда ждем ответа гуру - неужели нет DirID со значением %SystemDrive%, %HomeDrive%?

mbgroot 27-10-2008 21:26 935402

Цитата:

Цитата Stanner
DirID со значением %SystemDrive%, %HomeDrive% »

Вот список dirid (не знаю, полный или нет), я думал мне подойдет dirid -1, но видимо я где-то ошибся...

Stanner 27-10-2008 21:41 935413

Если -1 это абсолютный путь, тогда попробуй так:

CmdLine =-1,"%PROG_DIR%",%PROG_1%

Возможно, надо будет привести PROG_DIR в формат 8.3

Stanner 29-10-2008 21:28 937421

Посмотрел в руководстве, если ставить -1, то параметров всего два и следущим параметром указывается полный путь

mbgroot 30-10-2008 19:30 938333

Цитата:

Цитата Stanner
если ставить -1, то параметров всего два и следущим параметром указывается полный путь »

Точно. Экспериментально подтвердилось. Только вот не хочет инф корректно устанавливаться при вызове из скрипта модиф. модуля 7zSFX. Когда он из него запускается, получается, что %PROG_DIR% ничему не равно. Если уже после распаковки в ручную запустить инф на установку - все прекрасно прописывается... хотя уже при при запуске из 7zSFX в инфе физически прописано PROG_DIR ="C:\Program Files\Everything". Может это из-за того, что эта строчка послеедняя?

jameszero 30-10-2008 20:03 938357

Вложений: 1
mbgroot
Цитата:

Цитата mbgroot
не хочет инф корректно устанавливаться при вызове из скрипта модиф. модуля 7zSFX»

Это не то, что нужно?

mbgroot 30-10-2008 20:52 938410

Цитата:

Цитата jameszero
Это не то, что нужно? »

Дык у меня почти то же самое... Но не робит... Может конечно где-то ошибся - файл прилагаю.

jameszero 30-10-2008 21:09 938423

mbgroot
Нужно в файле конфигурации поменять местами строчки.
Код:

вместо:

RunProgram="hidcon:cmd /c copy %NameInf% %WINDIR%\\INF"
RunProgram="hidcon:cmd /c echo %PathInst%^\"|rw.exe >> %WINDIR%\\INF\\%NameInf%"

сделать:

RunProgram="hidcon:cmd /c echo %PathInst%^\"|rw.exe >> %NameInf%"
RunProgram="hidcon:cmd /c copy %NameInf% %WINDIR%\\INF"

AutoInstall и AutoInstall1 по аналогии.

mbgroot 30-10-2008 21:22 938435

Цитата:

Цитата jameszero
Нужно в файле конфигурации поменять местами строчки. »

Не помогло... Даже еще ниже передвинул - результат тот же.

jameszero 30-10-2008 21:35 938443

Вложений: 1
mbgroot
Странно, у меня отрабатывает нормально.
(отредактирован только запуск через RunProgram)

gora 31-10-2008 10:17 938787

mbgroot, проверил предложение jameszero
Цитата:

Цитата jameszero
Нужно в файле конфигурации поменять местами строчки. »

Все работает, хотя причины такого поведения мне не ясны. Варианты вроде равнозначны. Пробовал в Вашем варианте добавить задержку до запуска inf файла, не помогло. Немного подправил строки:
Код:

RunProgram="fm10:hidcon:cmd /c chcp 1251&echo \"%PathInst%\"|rw.exe >> %NameInf%"
RunProgram="hidcon:cmd /c copy %NameInf% %WINDIR%\\INF"

и удалил последнюю кавычку в inf файле. Во первых переменная стала выглядеть "нормально" в двух кавычках, а во вторых путь с кириллицей обрабатывается правильно.
А что это за утилита rw.exe, ссылку можно?

mbgroot 31-10-2008 16:34 939119

Цитата:

Цитата gora
А что это за утилита rw.exe, ссылку можно? »

Просто рылся в яндексе и обнаружил форум и на нем тему. Автор утилиты Тролль. У них там очень много интересных решений по батникам.
На рабочем компе скрипт отработал нормально (даже мой вариант). Что с домашним - непонятно, буду сейчас мучить.

gora 06-11-2008 15:55 945022

mbgroot, а ведь можно вообще без этой утилиты обойтись:
Код:

RunProgram="fm10:hidcon:cmd /c chcp 1251&echo PROG_DIR                =\"%PathInst%\">> %NameInf%"
Дописывает целую строку, а можно дописать и не одну при необходимости. ;)

mbgroot 06-11-2008 18:30 945180

Цитата:

Цитата gora
Дописывает целую строку, а можно дописать и не одну при необходимости. »

Ну я как обычно пошел по сложному пути :search: :)
Но насколько я понял, прога тоже интересная. Там еще на форуме был скрипт, создания переменной с путем к папке. Но насколько я понял, он использует запись на диск... А так хотелось через это путь к сидирому выставлять. Эх...

mbgroot 08-11-2008 20:51 947257

И снова непонятки в инфе... Не могу совладать с инструкцией про переименование файлов. Имею следующее:
читать дальше »
Код:

[DefaultInstall]
RenFiles                =Ren.FileDst
DelFiles                =Del.Add

[AddonInstall]
RenFiles                =Ren.FileAdd
DelFiles                =Del.Dst

[DestinationDirs]
Ren.FileAdd                =%PROG_DIR%
Ren.FileDst                =%PROG_DIR%

[SourceDisksFiles]
DEFAULT.ADD=1
DEFAULT.DST=1

[Ren.FileAdd]
DEFAULT.BAR,DEFAULT.ADD

[Ren.FileDst]
DEFAULT.BAR,DEFAULT.DST


[Del.Add]
%PROG_ADD%

[Del.Dst]
%PROG_DST%

[Strings]
PROG_ADD                ="DEFAULT.ADD"
PROG_DST                ="DEFAULT.DST"



в итоге получаю - "Ошибка установки файла INF. Причина: недопустимые данные". Подскажите, плиз, где я ошибся... А то мануал в данном месте трудно понятен для понимания...

gora 08-11-2008 21:12 947268

Цитата:

Цитата mbgroot
где я ошибся... »

В файле НЕ определена переменная %PROG_DIR%

mbgroot 08-11-2008 21:26 947281

Цитата:

Цитата gora
В файле НЕ определена переменная %PROG_DIR% »

э... я видать просто не дописал - переменная данная определяется. В инфе прописывается.

gora 08-11-2008 21:36 947294

Цитата:

Цитата mbgroot
переменная данная определяется. В инфе прописывается. »

Но в секцию [DestinationDirs] путь можно подставлять только в определенном формате (DestinationDirs=24, Program Files\Program Name) через переменные inf файла и ваша конструкция не сработает, т.к., эти переменные нельзя использовать в секции [Strings]. ИМХО

mbgroot 08-11-2008 22:06 947321

Цитата:

Цитата gora
DestinationDirs=24, Program Files\Program Name »

Вот именно это и помогло. Увидел эту строчку, вчитался еще раз в мануал и заработало - Ren.FileAdd =-1,%PROG_DIR%.

semiono 15-11-2008 07:47 953186

sc.exe vs inf
 
имеем фрагмент кода Nt501_inst.inf

Код:

[Ext2fs_Service_Inst]
ServiceType=2
StartType=1
ErrorControl=1
ServiceBinary=%12%\ext2fs.sys
LoadOrderGroup=File System

[IfsMount_Service_Inst]
ServiceType=1
StartType=1
ErrorControl=1
ServiceBinary=%12%\ifsmount.sys
LoadOrderGroup=System Bus Extender
Dependencies=MountMgr

делпаем "тоже самое" в консоли
# sc create Ext2fs binPath= system32\drivers\ext2fs.sys type= interact start= system error= severe group= "File System"
# sc create IfsMount binPath= system32\DRIVERS\ifsmount.sys type= share start= boot error= normal group= "System Bus Extender" depend= "MountMgr"

error (код не помню)

файлы разумеется уже скопированны
%SystemRoot%\system32\drivers\ext2fs.sys
%SystemRoot%\system32\drivers\ifsmount.sys
%SystemRoot%\system32\ifsdrives.cpl
%SystemRoot%\system32\ifsdrives.dll
%SystemRoot%\system32\ifsdrives.exe

реестр прописан тоже соответственно записям из Nt501_inst.inf

Что за загадки всегда кроются в rundll32.exe advpack.dll,LaunchINFSection zzz.inf, DefaultInstall,0 установке?


Ещё вопрос, тут код такой, насколько я понимаю с двумя секциями? А как их в комманду добавить? Или DefaultInstall сам всё найдёт?
Хотя, идея налету возникла, наверное надо два раза rundll32.exe advpack.dll пройтись с указанием DefaultInstall.ntx86 и DefaultInstall.ntx86.Services соответственно? Если даже можно пример релизации на InnoSetup очень пожалуйста?

Код:

[DefaultInstall.ntx86]
CopyFiles=InfFiles,Ext2FsFiles.x86,IfsMountFiles.x86,IfsCtrlFiles.x86
AddReg=RegUninst,RegExt2FsParams,RegIfsCtrl

[DefaultInstall.ntx86.Services]
AddService=Ext2fs,0x00000001,Ext2fs_Service_Inst
AddService=IfsMount,0x00000001,IfsMount_Service_Inst


sLiDeR-X 03-01-2009 11:50 996143

Подскажите пожалуйста, как поменять иконку у ярлыка?
допустим конка TC.ico
Как ее в раздел добавить?
Код:

[PROG3.AddShortcut]
Name                =%SRTC_NAME%,0x00000001
CmdLine                =16422,%PROG_DIR%,%PROG_1%
WorkingDir        =16422,%PROG_DIR%
SubDir                =%PROG_SDIR3%
InfoTip                =%PROG_INFO%


Mr dUSHA 03-01-2009 12:50 996181

Цитата:

Цитата sLiDeR-X
Как ее в раздел добавить? »

IconPath=16422,%PROG_DIR%,TC.ico

Полный прототип секции создания ярлыка такой:

[profile-items-section]
Name=link-name[,name-attributes]
CmdLine=dirid,[subdir],filename
[SubDir=path]
[WorkingDir=wd-dirid,wd-subdir]
[IconPath=icon-dirid,[icon-subdir],icon-filename]
[IconIndex=index-value]
[HotKey=hotkey-value]
[Infotip=info-tip]
[DisplayResource="ResDllPath\ResDll",ResID] (Windows XP and later)

ya158 04-05-2009 21:48 1110730

Подскажите есть ли возможность с помощью inf-файла создавать ярлыки для программ с параметрами? Например, чтобы строка запуска программы была следующей:

Код:

C:\WINDOWS\system32\rundll32.exe "Путь_к_файл.dll\файл.dll",параметр

jameszero 04-05-2009 21:58 1110741

ya158
Можно так, например:

Код:

[PROG.AddShortcut]
Name                ="Имя ярлыка"
CmdLine                =11,,"rundll32.exe ""файл.dll"",параметр"
WorkingDir        =Путь_к_файлу.dll
IconPath        =10,,regedit.exe
IconIndex        =0

или так:

Код:

[PROG.AddShortcut]
Name                ="Имя ярлыка"
CmdLine                =11,,"rundll32.exe ""Путь_к_файлу.dll\файл.dll"",параметр"
WorkingDir        =Путь_к_файлу.dll
IconPath        =10,,regedit.exe
IconIndex        =0

Серым цветом - косметика, использовать не обязательно.


Время: 05:56.

Время: 05:56.
© OSzone.net 2001-