Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе? / 20 сообщений из 20, страница 1 из 1
23.01.2009, 16:06
    #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
23.01.2009, 16:18
    #35774304
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
подключай TypeLib Information (TLBINF32.DLL) и смотри что у тебя есть в системе
...
Рейтинг: 0 / 0
23.01.2009, 16:29
    #35774349
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
OK, буду разбираться.
1) А сама эта typelib всегда есть?
2) Ее подключать тоже галкой или работать с ней через API?
3) Ну допустим узнаю, что чего-то нет. А сама прога(с тем чего нет) запустится? Самый примитивный вариант, чтобы запустилась и культурненько сказала юзеру:
"Дорогой... Мне кажется у тебя вот етого нету. А не пойти бы тебе на... и не нажать бы там... и не установить бы...ето а? Ну пока..."
...
Рейтинг: 0 / 0
23.01.2009, 17:22
    #35774488
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
А зачем это все?
...
Рейтинг: 0 / 0
23.01.2009, 17:37
    #35774528
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
Зачем программа или зачем такие сложности?
Программа чтобы общаться с Microsoft Fax, через эти библиотеки можно управлять сервером и т.п.
отслеживать процессы, давать задания и много чего еще, напр. конвертация в "корректный" tiff формат.
А сложности затем, что вы ставите прогу, а она вам выдает "No bla-bla-bla.dll found", а это извините невежливо по отн. к юзеру.
Надо 1)понять 2) объяснить чего не хватает 3) предложить установить 4) установить
Или сразу без лишних вопросов предложить вставить win cd и установить, особенно если компонет понятный и не сложный и не sql весом 100mb и т.п., хотя есть проги, кот. и на это способны.
...
Рейтинг: 0 / 0
23.01.2009, 18:17
    #35774648
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
Мне непонятно все равно. Зачем все эти сложности, если для разрешения их существует Setup? Я лично всегда компилирую установочный пакет, который все это и устанавливает, и никогда никаких бла-бла-бла не случается. Вы что, пытаетесь распространять вашу программу без Setup? Это же не .NET
...
Рейтинг: 0 / 0
23.01.2009, 19:08
    #35774733
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
OK, мысль вашу понял.
Для Setup я использую Smart Install Maker
Че-то я не вижу там опции установить Microsoft Fax.
В любом случае надо знать хитрую системную команду кот.это делает, ибо опция "команды" там есть.
Честно, других инсталяторов не знаю, да и не настолько крут чтобы их покупать.
М.б. тогда подскажете правильный путь (общих слов достаточно, с google-м работать умею).

P.S.Французская прога(мой пример) кот.сама устанавливает MS fax делает это именно через setup, причем инсталятор очень простенький.
...
Рейтинг: 0 / 0
23.01.2009, 19:50
    #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
24.01.2009, 04:26
    #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
24.01.2009, 09:31
    #35775120
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
Но раз это часть продаваемой за деньги Windows, то как же Вы его будете распространять? Без ведома Microsoft?
Технически то, что Вы хотите, легко осуществить. Заверните Ваш Setup.exe в простенькую MySetup.exe, внутри она (MySetup) лезет в системные директории, ищет DLL и OCX из MS Fax, если не находит, предлагает его установить с установочного диска клиента или что-то в этом роде. Далее запускает собственно Setup.exe Вашего приложения.
...
Рейтинг: 0 / 0
24.01.2009, 09:42
    #35775128
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
Я к тому, что установка целиком компонентов Windows вряд ли может являться задачей Вашего приложения. Скорее всего, это будет нелегитимно. Вы можете написать на упаковке требования, предъявляемые к системе Вашим продуктом, это да.
...
Рейтинг: 0 / 0
24.01.2009, 14:05
    #35775287
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
Что-то мы не о том. Если win уже куплен и установлен, то никакого криминала в установке его компонента я не вижу.
Как проверить наличие библиотеки, я вашу очевидную идею (проверить ее в %system% ) понял.
Как программно сделать Пуск->Настройка->Панель управления->Установка и Удаление программ->Установка компонентов Windows->Службы факсов->Ставим галку->Далее...?
Я в google рылся, но вы же понимаете, что он выдаст на запрос
"Windows+Components+installation"-кучу тупых ссылок как устанавливать сам win...
...
Рейтинг: 0 / 0
25.01.2009, 01:51
    #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
26.01.2009, 17:30
    #35778208
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
Это команды системы DOS, нет, не карается. Microsoft никого и не карает никогда, это частный бизнес.

Успехов

:0)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
09.09.2012, 23:03
    #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
10.09.2012, 01:31
    #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
10.09.2012, 03:07
    #37950375
ЦЦа
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как при старте проги проверить наличие библиотек-компонентов и т.п. в системе?
Дмитрий77,

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


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