powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
20 сообщений из 20, страница 1 из 1
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #35774258
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предположим прога использует некоторую подсистему-компонент виндоус.
Если говорить на языке проги
References->Library
В моем случае я использую:
Microsoft Com Service Extended COM Type Library
Соотв. код начинается со строк
Код: plaintext
1.
2.
Dim WithEvents g_objFaxServer As FAXCOMEXLib.FaxServer
Dim collFaxOutgoingJobs As FAXCOMEXLib.FaxOutgoingJobs
Dim objFaxOutgoingJob As FAXCOMEXLib.FaxOutgoingJob
и стоит галка в project на эту тему.
Если этого(в системе) нету то прога соотв. ругается матом:
Бла-бла-бла нет такой длл.
Как сделать так, чтобы она все же запустилась и продолжила культурный диалог с юзером?
Вопрос как-бы общий, в vb это сплошь и рядом.
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #35774304
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
подключай TypeLib Information (TLBINF32.DLL) и смотри что у тебя есть в системе
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #35774349
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OK, буду разбираться.
1) А сама эта typelib всегда есть?
2) Ее подключать тоже галкой или работать с ней через API?
3) Ну допустим узнаю, что чего-то нет. А сама прога(с тем чего нет) запустится? Самый примитивный вариант, чтобы запустилась и культурненько сказала юзеру:
"Дорогой... Мне кажется у тебя вот етого нету. А не пойти бы тебе на... и не нажать бы там... и не установить бы...ето а? Ну пока..."
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #35774488
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем это все?
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #35774528
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем программа или зачем такие сложности?
Программа чтобы общаться с Microsoft Fax, через эти библиотеки можно управлять сервером и т.п.
отслеживать процессы, давать задания и много чего еще, напр. конвертация в "корректный" tiff формат.
А сложности затем, что вы ставите прогу, а она вам выдает "No bla-bla-bla.dll found", а это извините невежливо по отн. к юзеру.
Надо 1)понять 2) объяснить чего не хватает 3) предложить установить 4) установить
Или сразу без лишних вопросов предложить вставить win cd и установить, особенно если компонет понятный и не сложный и не sql весом 100mb и т.п., хотя есть проги, кот. и на это способны.
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #35774648
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне непонятно все равно. Зачем все эти сложности, если для разрешения их существует Setup? Я лично всегда компилирую установочный пакет, который все это и устанавливает, и никогда никаких бла-бла-бла не случается. Вы что, пытаетесь распространять вашу программу без Setup? Это же не .NET
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #35774733
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OK, мысль вашу понял.
Для Setup я использую Smart Install Maker
Че-то я не вижу там опции установить Microsoft Fax.
В любом случае надо знать хитрую системную команду кот.это делает, ибо опция "команды" там есть.
Честно, других инсталяторов не знаю, да и не настолько крут чтобы их покупать.
М.б. тогда подскажете правильный путь (общих слов достаточно, с google-м работать умею).

P.S.Французская прога(мой пример) кот.сама устанавливает MS fax делает это именно через setup, причем инсталятор очень простенький.
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #35774784
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Попытайтесь применить стандартный Package & Deployment Wizard, поставляемый с VB6 Enterprise Edition. Если у Вас стоит Visual Studio 6 Enterprise, то он там будет. Он должен подхватить из Вашего проекта все необходимые DLLs. С другой стороны, если Ваш проект их не использует, но предполагает наличие DLLs из Microsoft Fax на машине клиента, то такие вещи тоже решаются. Но, если Microsoft Fax есть продаваемая за деньги часть его оффисного пакета, как например Word, и он нужен полностью, а не только его какие-то библиотеки, то как же Вы собираетесь его распространять?

Если Вы воспользуетесь Package & Deployment Wizard, то там найдете возможность добавить в установочный пакет и те DLLs, которых нет в Вашем проекте. Они потом будут установлены на клиенте, если их там не будет или Ваши окажутся новее.
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #35775077
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конкретно в моем случае Microsoft Fax Service должен стоять на PC. И именно не отдельно вытащенные библиотеки, а целиком как программа, потому как моя программа (вернее одна из ее частей) предполагает использование сервиса в целом. Другое дело, что установка этого компонента (приложения, а не отдельно выдернутой dll) автоматически гарантирует наличие искомой.
VladConnДмитрий77,
Попытайтесь применить стандартный Package & Deployment Wizard, поставляемый с VB6 Enterprise Edition....
Но, если Microsoft Fax есть продаваемая за деньги часть его оффисного пакета, как например Word, и он нужен полностью, а не только его какие-то библиотеки, то как же Вы собираетесь его распространять?

Нет, это часть продаваемой за деньги Windows, такая же как блокнот или paint. он есть в xp, и есть в 2003, интерфейс чуть разный, есть различия в количестве факс-линий (xp-1 2003-сколько хочешь), но библиотеки полностью совместимы и взаимозаменяемы проверено, и используется одинаково. В висте тоже что-то такое есть, но это отдельный вопрос, им пока не занимался.
По сути инсталятор должен сделать следующее:
Пуск->Настройка->Панель управления->Установка и Удаление программ->Установка компонентов Windows->Службы факсов->Ставим галку->Далее...
Для работы программы, чтоб не ругнулась, одной dll , конечно хватит, но для реализации идеологии нужно именно то о чем написал.

Package & Deployment Wizard-посмотрю, но не уверен что оно сумеет компонент виндов целиком установить...
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #35775120
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но раз это часть продаваемой за деньги Windows, то как же Вы его будете распространять? Без ведома Microsoft?
Технически то, что Вы хотите, легко осуществить. Заверните Ваш Setup.exe в простенькую MySetup.exe, внутри она (MySetup) лезет в системные директории, ищет DLL и OCX из MS Fax, если не находит, предлагает его установить с установочного диска клиента или что-то в этом роде. Далее запускает собственно Setup.exe Вашего приложения.
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #35775128
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я к тому, что установка целиком компонентов Windows вряд ли может являться задачей Вашего приложения. Скорее всего, это будет нелегитимно. Вы можете написать на упаковке требования, предъявляемые к системе Вашим продуктом, это да.
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #35775287
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то мы не о том. Если win уже куплен и установлен, то никакого криминала в установке его компонента я не вижу.
Как проверить наличие библиотеки, я вашу очевидную идею (проверить ее в %system% ) понял.
Как программно сделать Пуск->Настройка->Панель управления->Установка и Удаление программ->Установка компонентов Windows->Службы факсов->Ставим галку->Далее...?
Я в google рылся, но вы же понимаете, что он выдаст на запрос
"Windows+Components+installation"-кучу тупых ссылок как устанавливать сам win...
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #35775718
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как всегда все сам.
http://support.microsoft.com/kb/222444

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
//создаем файл_ответов 
 1 ) cmd /c echo [components] > %temp%\ocm.txt
 2 ) cmd /c echo Fax=On >> %temp%\ocm.txt
//проверяем-устанавливаем fax service, система сама попросит диск
// /r-не перегружать, /q -вообще не выводить на экран
 3 ) sysocmgr /i:%windir%\inf\sysoc.inf /u:%temp%\ocm.txt /r
//ну и удаляем ненужный более файл
 4 ) cmd /c del %temp%\ocm.txt /q

В указанной статье конечно особо порадовала фраза...
Примечание. Эта процедура не поддерживается такими программами, как Microsoft Fax Service, Windows Media Player, COM+ и Distributed Transaction Coordinator, и не работает в них. Данные компоненты необходимы для работы системы и удалению не подлежат.
Врут, поддерживаеся. Правда там внизу написано что вся статья касается win 2000.
Для проверки открыл setup-ник вышеупомянутой французской проги в текстовом редакторе, и радостно обнаружил там именно это:

Код: plaintext
1.
2.
sysocmgr    open    /i:%%windir%%\inf\sysoc.inf /u:%%temp%%\%s
/r%s  /q [components]
Fax=On

Полагаю наличие в системе команд cmd и echo и sysocmgr не надо проверять и их использование microsoft-ом не карается?
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #35778208
Фотография VladConn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это команды системы DOS, нет, не карается. Microsoft никого и не карает никогда, это частный бизнес.

Успехов

:0)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #37950238
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Если этого(в системе) нету то прога соотв. ругается матом:
Бла-бла-бла нет такой длл.
Как сделать так, чтобы она все же запустилась и продолжила культурный диалог с юзером?
Вопрос как-бы общий, в vb это сплошь и рядом.
А вот так нормально для проверки?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Public Function bla-bla_Initialise(ByRef _hwnd As Long, ByRef err_text As String, ...) As Boolean
...
  hMod = LoadLibrary("bla-bla.dll")
  If hMod = 0 Then
    err_text = "bla-bla.dll not found"
    bla-bla_Initialise = False
    Exit Function
  End If
  
  If (GetProcAddress(hMod, "function1") = 0) Or (GetProcAddress(hMod, "function2") = 0)... ) Then
    err_text = "bla-bla.dll is invalid"
    bla-bla_Initialise = False
    Exit Function
...
  End If


Или LoadLibrary это перебор?
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #37950359
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Или LoadLibrary это перебор?
Ну, перебор как бы ощущается уже при тестировании.
Выражается в том, что пока полностью не закрою VB-студию (при уже завершившейся проге), не могу заменить bla-bla.dll в папке с программой.
М.б так лучше?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Public Function bla-bla_Initialise(ByRef _hwnd As Long, ByRef err_text As String, ...) As Boolean
...
  hMod = LoadLibrary("bla-bla.dll")
  If hMod = 0 Then
    err_text = "bla-bla.dll not found"
    bla-bla_Initialise = False
    Exit Function
  End If
  
  If (GetProcAddress(hMod, "function1") = 0) Or (GetProcAddress(hMod, "function2") = 0)... ) Then
    err_text = "bla-bla.dll is invalid"
    bla-bla_Initialise = False
    FreeLibrary hMod
    Exit Function
  End If

  FreeLibrary hMod

...
  End If


По крайне мере студию закрывать не надо.

Что вообще дает LoadLibrary и зачем она нужна? Пользуюсь API много, но никогда этой ф-цией не пользовался.
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #37950375
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77,

нормально, в C/C++ стандартный приём. Просто LoadLibrary(ExW) скрыта в VB за Declare и References, и совместное применение FreeLibrary со стандартными механизмами может привести к краху процесса, если быть неосторожным.
Что даёт LoadLibrary? Динамическую загрузку исполняемого модуля (и его dependencies) в адресное пространство своего процесса (если это ещё не сделано), и увеличение счётчика его использования. Но подробнее объясняеЦЦа известно где. в эмэсдеэнЕ
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #37950384
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЦЦанормально, в C/C++ стандартный приём.Из с-шного примера и стырил.ЦЦаЧто даёт LoadLibrary? Динамическую загрузку исполняемого модуля (и его dependencies) в адресное пространство своего процесса (если это ещё не сделано), и увеличение счётчика его использования..Т.е. при первом вызове API делается то же самое?ЦЦасовместное применение FreeLibrary со стандартными механизмами может привести к краху процесса, если быть неосторожным.Там куда вставил (перед первым вызовом API) к крашу не приведет? Или вообще зря (если с dll все в порядке)
М.б. вставить в процедуру закрытия приложения? В самый конец (когда коллбэк к этой dll уже обнулен и т.п.)?
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #37950498
SangYong
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. запуск первого exe - проверка установленных компонентов
можно его оформить как заставка...
2. первый пункт запускает рабочий exe если проверки
пройдены...ну наверно будут проблемы с депом....у многих
он вкрячен по умолчанию
...
Рейтинг: 0 / 0
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
    #37952232
ЦЦа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий77Т.е. при первом вызове API делается то же самое?При первом вызове функции, объявленной через Declare, вызываеЦЦа LoadLibrary(ExW) и GetProcAddress, адрес функции запоминаеЦЦа, делаеЦЦа вызов функции. Повторный вызов идёт уже по запомненному адресу. Следствия два: 1) счётчик использования исполняемого модуля равен количеству вызванных функций 2) если ручками хочеЦЦа выгрузить модуль, то надо вызывать FreeLibrary соответственное количество раз. После того, как модуль выгружен, его (ранее вызывавшиеся (только ?)) функции вызывать нельзя, а то процесс примет ислам.Дмитрий77Там куда вставил (перед первым вызовом API) к крашу не приведет? Или вообще зря (если с dll все в порядке)
М.б. вставить в процедуру закрытия приложения? В самый конец (когда коллбэк к этой dll уже обнулен и т.п.)?Не приведёт. Да где угодно не приведёт (по крайней мере, в рамках обычной программы на VB).
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]