Страница: 1 | 2 |
Вопрос: Совместимость и читабельность ОСХ
Добавлено: 29.04.05 12:01
Автор вопроса: Дилетант
Что надо сделать, чтобы прога-заставка автозапуска CD читалась на компах, не обремененных компиляторами VB?
Сначала компы ругались, что нет таких-то OCX. Я прописал на CD папочку со всеми необходимыми DLL и OCX, теперь они ругаются, что OCX не так зарегистрированы. Что делать?
Ответы
Всего ответов: 17
Номер ответа: 1
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #1
Добавлено: 29.04.05 12:34
Что делать? Регистрировать.
В осх'ах есть функция регистрации. DllRegisterServer. Вызываешь её при запуске приложения.
Можно запустить regsvr32.exe с параметром командной строки - путём к твоим осх. Эта утилита есть в любой Винде. Она и зарегистрирует как надо. Чтобы не выскакивало сообщение, что успешно зарегистрировано (или наоборот) можно вызвать её с ключём -s.
Номер ответа: 2
Автор ответа:
Дилетант
Вопросов: 13
Ответов: 30
Профиль | | #2
Добавлено: 29.04.05 14:03
Но это ведь сидюшная заставка! Так это что - юзер, который вставит CD, вместо запуска заставки должен сидеть и регистрировать ОСХ? У меня-то на компе они зарегистрированы, и всё запускается.
Номер ответа: 3
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #3
Добавлено: 29.04.05 14:15
Причём здесь юзер?
У тебя есть программа-заставка, которая использует эти осх. Вот эта программа пусть и регистрирует эти осх (программно, а не путем тыкания мышью) при своём запуске.
Номер ответа: 4
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #4
Добавлено: 29.04.05 14:27
По моему программа даже не запустится без этих самых OCX'ов. Напиши программу-регистратор или поищи в сети.
Номер ответа: 5
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #5
Добавлено: 29.04.05 14:31
Примитивно это делается так: Пишется программа регистратор, которая не использует OCX. Она регистрирует все нужные библиотеки и вызывает основную программу.
Номер ответа: 6
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #6
Добавлено: 29.04.05 14:32
Сделай, чтобы твоя программа запускалась с Sub Main, расположенной в стартовом модуле и первой строкой вставь регистрацию:
Shell "regsvr32.exe /s G:\MyOcx.ocx"
'дальше идет остальной код.
'
End Sub
Здесь /s - ключ "тихой", без уведомления, регистрации. Если его убрать, то будет регистрировать и сообщать о том, что зарегистрировано.
G:\MyOcx.ocx - вместо этого вставь полный путь к твоему осх.
В свойствах проекта укажи стартовую точку - Sub Main.
Номер ответа: 7
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #7
Добавлено: 29.04.05 15:11
Млин, кидал тут как-то на форуме код, с юзанием асьма, корректной регилки... На компе не осталось ((
Но фишка в чем - после закрытия приложения надо бы и разрегить контролы... а так же перед регистрацией - проверить, нет-ли уже существующего, иначе у кого установлен VB будут тя долго материть, по кой фиг ты у них сбил регистрацию контролов...
Номер ответа: 8
Автор ответа:
Дилетант
Вопросов: 13
Ответов: 30
Профиль | | #8
Добавлено: 29.04.05 15:49
Вопрос: OCX и DLL регистрируются одинаково? Такой, к примеру, код подойдёт?
Shell "regsvr32.exe /s " & App.Path _
& "\COMCTL32.OCX"
Shell "regsvr32.exe /s " & App.Path _
& "\asycfilt.dll"
Номер ответа: 9
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #9
Добавлено: 29.04.05 15:51
ИМХО, лучше через LoadLibrary и DllRegisterServer - по крайней мере функция возвращает результат. Хотя если exe выкинул ошибку - и так ведь понятно что не все хорошо, так ведь?
Номер ответа: 10
Автор ответа:
Дилетант
Вопросов: 13
Ответов: 30
Профиль | | #10
Добавлено: 29.04.05 16:00
Теперь дальше (уж простите дилетанта):
Когда я после этих всех шеллов пишу Load Form1, что-то происходит, но форма не видна. Видимо, это из-за того, что она "неправильной" формы, а об этом сказано в модуле. Но когда я приписываю Load Module1, VB говорит, что это лажа, мисматч.
Итак:
КАК ПРАВИЛЬНО ЗАГРУЗИТЬ МОДУЛЬ В SUB MAIN?
Номер ответа: 11
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #11
Добавлено: 29.04.05 16:05
Так форму ещё и показать нужно. Form1.Show
Номер ответа: 12
Автор ответа:
Дилетант
Вопросов: 13
Ответов: 30
Профиль | | #12
Добавлено: 29.04.05 16:09
Недотумкал, спасибо. Вопрос снят.
Номер ответа: 13
Автор ответа:
Дилетант
Вопросов: 13
Ответов: 30
Профиль | | #13
Добавлено: 29.04.05 16:47
Ещё раз всем спасибо, всё работает, но последний вопрос. Sne справедливо заметил, что "после закрытия приложения надо бы и разрегить контролы".
То есть что-то нужно вписать в Unload.
Вот только что?..
Номер ответа: 14
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #14
Добавлено: 29.04.05 18:19
Дилетант
Это всё нужно делать по-человечески, а не так: зарегистрировал - разрегистрировал.
После твоей проги ещё и другие должны нормально функционировать. А снять регистрацию в Unload - это называется "После нас - хоть потоп".
Делай примерно так:
Все осх-ы которые использует прога, запиши в файлик (например, Reg.txt). Вместе с путями, куда их устанавливать. Каждый осх обычно имеет своё место на винте. Чаще всего - системная папка.
1. При запуске прога пусть считывает последовательно из этого файла пути и проверит, существует ли на винте такой файл? Если существует - наверняка он зарегистрирован, и можно пропустить копирование файла и регистрацию.
Если файла на винте нет - копируй его по адресу, указанному в твоем файле Reg.txt и регистрируй.
2. Если скопировал и зарегил - запиши, что такой-то файл был зареган (в отдельном файле, например UnReg.txt). Это для того, чтобы знать, какие осх-ы надо будет разрегистрировать и удалить с винта.
Таким образом ты скопируешь на винт и зарегистрируешь необходимый минимум файлов и создашь в реестре минимум ключей.
3. Последовательно пройди по всему списку файла Reg.txt, проверяя наличие и при необходимости копируя на винт/регистрируя/отмечая в UnReg.txt все свои осх-ы.
4. При завершении программы, считай содержимое файла UnReg.txt (в котором записаны все файлы, которые ты скопировал и зарегистрировал) и для всех этих файлов сними регистрацию и удали их с винта.
При этом ты не исказишь регистрацию уже существовавших до тебя на компе юзера осх-ов, и после себя не оставишь мусора в виде "мертвых" ключей в реестре и файлов на винте.
Снять регистрацию можно так:
Shell "regsvr32.exe /s /u G:\MyOcx.ocx"
добавился ключ /u - uninstall.
Номер ответа: 15
Автор ответа:
Дилетант
Вопросов: 13
Ответов: 30
Профиль | | #15
Добавлено: 01.05.05 03:14
Большое спасибо. Кажется, всё получилось. Правда, обнаружился странный глюк, не связанный с этой проблемой. Но это - новая тема, которую я и открыл.