Несколько вопросов по .INF
1. INF с секцией OptionalComponents.
Как быстрее и проще адаптировать его для установки вручную (контекстное меню - установить)? Можно ли просто скопировать содержимое секции в DefaultInstall? А можно ли как-то "сослаться" из DefaultInstall на OptionalComponents (или наоборот)? 2. INF вносит данные в HKCU. Как обеспечить внесение этих данных для каждого нового юзера (при первом логине)? Как обеспечить удаление этих данных при первом входе каждого юзера после деинсталяции программы? |
придётся попробовать поднять тему :(
Вышеперечисленное абсолютно необходимо для полноценного использования "истинно многопользовательской" системы |
Цитата:
Цитата:
|
Эх, надо было просто поднять... Старой версии не осталось, а там специально в первой же строке было сказано, что, мол, и то-то читал, и там-то линки из шапки посетил и т.п. :) И вопросы там были разжёваны, а тут сократил до предела
"INF вносит данные" в куда я ему скажу, в пределах реестра, разумеется - AddReg blah-blah. :) А тот же HKCU может пригодиться для работы софта (какой на это способен) сразу после установки. Но если юзеров несколько, что делать с другими, и с Default User profile (не HKU\.DEFAUL)? Как вариант возможно внесение необходимых данных и текущему юзеру после перелогина. Но тогда это всё равно сводится к вопросу "а как сделать для каждого при первом входе". В "Руководстве" же как раз те места, которые нужны ("более подробно в описании того-то") пусты. :( Есть подозрение, что можно заюзать AdvancedINF-2 PerUserInstall, но как правильно? Что значит "PerUserInstall=Имя единственной дочерней секции"? Сделать, что-ли, вроде Код:
[DefaultInstall] И как тогда насчёт PerUserUNInstall? CMD хороший, просто и со вкусом, хотя всё-таки это изврат. В идеале нужно то же поведение, которое можно было видеть после установки некоторых старых МС-вских продуктов - например, ИЕ 4 или 4.5. Т.е. во время первого после установки входа в систему (для каждого юзера) десктоп не показывался сразу, а вместо этого висел месседж типа "обновление конфигурации" или что-то такое, ставились ярлычки, что-то регистрилось и т.д. и т.п. |
VitRom
Цитата:
http://forum.oszone.net/thread-82861.html http://forum.oszone.net/thread-79336.html |
Petya V4sechkin, спасибо, поиском х.. бы нашёл. В посте 8 есть 90% ответа на мой 1-й вопрос. Неясной осталась лишь допустимость "наглой" ссылки на другую главную секцию.
И самое главное осталось - "Per-Every-User-(un)install" |
VitRom
Насчет PerUserInstall подсказать не смогу (не использовал), поищи в доках. Главное - не забудь, что по правой кнопке мыши на inf-файле вызывается обычный setupapi.dll. |
Petya V4sechkin, вся беда в том, что я уже искал, и не только там.
Всё, что попадается - только долбаный ДДК или его производные. Или вообще ничего: http://search.msdn.microsoft.com/sea...PerUserInstall Цитата:
Цитата:
Получается, использовать AdvancedInf в шелле я могу только прямой командой? Или AddReg в HKCU\runonce и перелогин? |
VitRom
Цитата:
В принципе, для проверки выполнения из sysoc.inf можно попробовать тоже батником, типа как здесь. |
Я имел в виду не "где посмотреть ассоциацию", :)
а "где брать аналогичную информацию" в применении к "стандартной" (нетвиканной) Винде. Или подобные особенности вообще нигде не документированы, :o и то, чем со мной поделились - результат именно того, что кому-то когда-то после долгого траха пришлось-таки самому смотреть реестр? ЗЫ. В налево и направо склоняемом МСДН у меня лично всегда получалось найти только разные варианты долбаного ДДК, и всё. |
VitRom
Ну ты просто залез в такие дебри, в которые здесь никто еще не залезал :) Может, не надо усложнять (Uninstall для каждого юзера), какая в этом реальная необходимость? Если у кого-то что-то в ветке HKCU и останется, особой проблемы в этом не вижу. Да и Install тоже в большинстве случаев делают до первого логона, а там, сам понимаешь, все изменения HKCU вносятся в Default-профиль. |
Раз уж тут появилась отдельная тема, то задам свой вопрос здесь.
Проявилась у меня одна проблема с регистрацией библиотеки из 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 |
dimich22
Цитата:
Цитата:
Другой способ - перенос выполнения на RunOnce после первого логона. Пример в аддоне 1-MU (для этого надо использовать advpack.dll, а RegisterDlls приходится заменять на RegisterOCXs). |
Цитата:
|
dimich22
Не знаю, у меня при выполнении inf-файлов с помощью advpack.dll почему-то не работала секция RegisterDlls. |
Может, я что не так делаю, но у меня при такой строчке в inf-файле
Код:
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce","FindeXer_inf",0x20000,"%SystemRoot%\System32\rundll32.exe advpack.dll,LaunchINFSection %17%\wee.inf,RunOnceInst,0" |
dimich22
Дык, два раза надо ;) В RunOnceInst второй такой же фокус. |
Можно поподробнее, для тупых :wink: А то что-то я торможу. Т.е. в этой строчке я ссылаюсь на RunOnceInst, а в ней я не регистрирую библиотеку, а опять пишу ту же строчку, только, например, со ссылкой на RunOnceInst1 и там только прописываю RegisterOcx? Я пытался проделать тот же маневр, но через батник, но не получилось.
|
dimich22
Да, примерно так. Не знаю, почему у тебя не получилось через батник :) |
Я завтра попробую и отпишусь. Через батник пробовал так: в инфе прописывал запуск батника через runonce, в котором в свою очередь добавлялся запуск другого батника через runonce. Так вот, второй батник запускался практически сразу же, т.е. на T13.
|
Petya V4sechkin, спасибо за наводку. Библиотека зарегистрировалась как нужно. Но для этого пришлось не два раза, а три обращаться к runonce. М.б. это зависит от количества аддонов, но я кроме reqired_dll's и своего ничего не ставил. Если прописывать два раза, то второй запуск происходит тоже на 13 минуте, но несколько позже первого - успевают поставиться некоторые вещи из svcpack. Вот когда происходит третий запуск я не отследил. Видимо тоже в районе T13, но после svcpack. Если прописать 4 раза:), то вот тогда похоже, что запуск из runonce происходит при логоне. Оставил пока трехуровневую рекурсию:) Посмотрим, что будет при увеличении числа аддонов.
|
Petya V4sechkin
Цитата:
Цитата:
Цитата:
А "до первого логона" значит, что мне надо сначала ставить систему со всеми аддонами, а потом тут же "лишние" сносить. Вот этот бред я и хочу избежать. |
VitRom
INF не всегда наилучший путь. Иногда имеет смысл воспользоваться установщиком типа InnoSetup. Вы же не говорите, какая у вас задача конкретно. Понятно лишь то, что вы хотите непременно решить ее при помощи INF, но почему именно так, неясно. |
Vadikan, повторюсь:
"отн. универсальный дистр, с которого..." и далее по тексту. Всё очень просто. Речь не идёт о чём-нибудь типа "аддон Фотошоп-КС" :) Существует много программ класса "мастхэв". Одновременно верно и то, что многие из них нужны не всегда. Тот же, например, ВинДежавю - мастхэв, но всё-же кому-то ни разу в жизни не понадобится, а кому-то понадобится, но не сразу. При этом и обновлять её практически ни к чему - сам формат давно устоялся, софтина тоже стабильная. Или тулзы от Русиновича... ИМХО программы такого рода должны быть доступны конечному юзеру дистра аналогично "компонентам" Винды. Понадобилась - "добавил компонент", и всё. Мне до сих пор не требовались "Службы печати Юникс", но я знаю, что если надо - достаточно открыть менеджер компонент и поставить галку. При этом многие из этих прог невелики по размерам и почти не требуют инсталяции, и мне претит мысль держать каждую со своим персональным инсталятором, который может быть и в 20 раз больше самой проги, тем более когда движок для инсталяции всё равно уже есть в системе. А просто закомментить строчку "Modes=1,2,3,4" решает проблему лишь наполовину. Да, софтина не ставится сразу, ждёт, пока не поставишь - но не каждая после установки становится доступна сразу для всех юзеров многоюзерской машины, некоторые работоспособны только под юзером, который ставил. |
VitRom
Я понял о каких программах речь, но все равно не считаю, что проблему надо решать при помощи INF-файлов и компонентов. Есть более простое решение - $OEM$ папки или единственный SFX с такими програмами. У меня есть папка system32\MyTools, куда идут все подобные утилиты. Я просто добавляю папку в PATH и запускаю программы при нбх из командной строки. А если юзеру нужно Цитата:
P.S. Добавление папки в PATH — OSZone.net wiki |
VitRom
Цитата:
|
Vadikan, jameszero
Ха! Все эти варианты я тоже рассматривал. Как неоднократно говорилось на форуме и подтверждено практикой, наличие $OEM$ отключает какой-то (не помню уже) функционал "стандартного" дистра, как и наличие "winnt.sif" с данными свыше определённого минимума (где-то я постил результат тестов) отключает, кажется, Рекавери Консоль. Хотя для себя я тоже давно юзаю "папочку на все случаи" (только C:\SYSTEM и добавляю её первой в Path) с кучей всячины... Хотелось просто сделать ещё лучшее (да знаю, знаю, что это враг хорошего! :)) К моему стыду, до сих пор не дошли руки до БСПИ, хотя уже не раз подумывал о нём. Но всё равно недостатки у этого способа те же: 1) перегруз лишними "персональными" сетап-обертками и/или 2) опять-таки проблема полноценной установки на "обжитую" многоюзерскую систему |
VitRom
Цитата:
Цитата:
Цитата:
Цитата:
В общем, это все оффтоп. Если очень хочется INF, то вперед :) |
Vadikan
Цитата:
Сорри за оффтоп. |
Vadikan, хочется, хочется ИНФ! но РТФМ-ов нет!
А что "Это проще, чем" - то да, проще... До того момента когда начинаешь втискивать это в компакт. :wacko: ЗЫ. Отец (пингвинятник) и сын: - Пап, как дискету отформатировать? - РТФМ! - [вздыхая] Ман - что? ;) |
Цитата:
Цитата:
Вы лучше объясните как пользоваться PerUserInstall?: Цитата:
|
Как запускать через inf - RunOnce?
|
INF файл можно установить из командной строки так:
Код:
%SystemRoot%\System32\rundll32.exe setupapi,InstallHinfSection DefaultInstall 132 Путь к inf файлу |
Код:
[DestinationDirs] |
Master of Magic
Так сработает: Код:
[DestinationDirs] |
Выложил сюда, мож кому пригодится:
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 если сначала заглянуть в тему "Авторам аддонов" и перейти по предложенным ссылкам, то этих переменных там на русском нет, а на английском есть, не обратил внимания,сорри, попрошу, что бы посты удалили.
|
Да, на русском нет. С другой стороны, может и стоит такого рода инфу поместить в более доступное место, чтобы не искать.
|
как сделать в inf так чтобы при удалении из установки и удалении програм аддона вначале закрывало процесс а потом деинсталлировало уже корректно?
|
Написал несколько инсталяшек через inf-файл и при детальной отладке увидел, что в "Установка компонентов Windows" появляется не только необходимая программа на установку/удаление но и еще пустая иконка без каких-либо записей и описаний. В чем бага? Тип установки sysoc.inf
|
greg_b
Посмотри здесь (я там, постом ниже, ответил), а если думаешь, что дело в твоём аддоне, то выложи inf файл из аддона и файл sysoc из него же. |
jameszero - спасибо буду проверять
|
Цитата:
В своем аддоне я решил сделать "универсальность" - что бы ставился не только в Program Files, но и куда пользователь захочет (установка на "живую" систему). Все победил, кроме добавления ярлыка. На данный момент имею следующее (насколько я понял синтаксис): Код:
[DefaultInstall] |
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" |
Цитата:
И еще маленький вопрос - имеет ли значение, где стоит PROG_DIR="C:\Program Files\Everything" - в начале списка [Strings] или в его конце? |
mbgroot, так там и не обязательно Program Files - имхо, первым параметром может быть D:\Work, вторым - ProgDirName, а третьим - ProgName.exe - и ярлык должен слепиться. А где стоит строка - не важно.
|
Цитата:
Цитата:
Сейчас заметил, что и с прописыванием в автозапуск такакя же ерунда. Значение PROG_DIR просто не подставляется, как бы оно ничему не равно. Зашел в папку C:\Windows\INF и на своем инфе нажал - Установить. После этого посмотрел реестр - автозапуск прописался корректно, проверил ярлык в пуске - некорректно. Запустил инф на установку еще раз - и ярлык тоже корректно прописался. Хотя я ничего не изменял - просто запускал... Ничче не понимаю... |
Тогда ждем ответа гуру - неужели нет DirID со значением %SystemDrive%, %HomeDrive%?
|
|
Если -1 это абсолютный путь, тогда попробуй так:
CmdLine =-1,"%PROG_DIR%",%PROG_1% Возможно, надо будет привести PROG_DIR в формат 8.3 |
Посмотрел в руководстве, если ставить -1, то параметров всего два и следущим параметром указывается полный путь
|
Цитата:
|
Вложений: 1
mbgroot
Цитата:
|
Цитата:
|
mbgroot
Нужно в файле конфигурации поменять местами строчки. Код:
вместо: |
Цитата:
|
Вложений: 1
mbgroot
Странно, у меня отрабатывает нормально. (отредактирован только запуск через RunProgram) |
mbgroot, проверил предложение jameszero
Цитата:
Код:
RunProgram="fm10:hidcon:cmd /c chcp 1251&echo \"%PathInst%\"|rw.exe >> %NameInf%" А что это за утилита rw.exe, ссылку можно? |
Цитата:
На рабочем компе скрипт отработал нормально (даже мой вариант). Что с домашним - непонятно, буду сейчас мучить. |
mbgroot, а ведь можно вообще без этой утилиты обойтись:
Код:
RunProgram="fm10:hidcon:cmd /c chcp 1251&echo PROG_DIR =\"%PathInst%\">> %NameInf%" |
Цитата:
Но насколько я понял, прога тоже интересная. Там еще на форуме был скрипт, создания переменной с путем к папке. Но насколько я понял, он использует запись на диск... А так хотелось через это путь к сидирому выставлять. Эх... |
И снова непонятки в инфе... Не могу совладать с инструкцией про переименование файлов. Имею следующее:
в итоге получаю - "Ошибка установки файла INF. Причина: недопустимые данные". Подскажите, плиз, где я ошибся... А то мануал в данном месте трудно понятен для понимания... |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
|
sc.exe vs inf
имеем фрагмент кода Nt501_inst.inf
Код:
[Ext2fs_Service_Inst] # 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] |
Подскажите пожалуйста, как поменять иконку у ярлыка?
допустим конка TC.ico Как ее в раздел добавить? Код:
[PROG3.AddShortcut] |
Цитата:
Полный прототип секции создания ярлыка такой: [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) |
Подскажите есть ли возможность с помощью inf-файла создавать ярлыки для программ с параметрами? Например, чтобы строка запуска программы была следующей:
Код:
C:\WINDOWS\system32\rundll32.exe "Путь_к_файл.dll\файл.dll",параметр |
ya158
Можно так, например: Код:
[PROG.AddShortcut] Код:
[PROG.AddShortcut] |
Время: 05:56. |
Время: 05:56.
© OSzone.net 2001-