Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: basicproduction.nm.ru
 Профиль | | #4
Добавлено: 29.04.05 14:27
По моему программа даже не запустится без этих самых OCX'ов. Напиши программу-регистратор или поищи в сети.

Ответить

Номер ответа: 5
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #5
Добавлено: 29.04.05 14:31
Примитивно это делается так: Пишется программа регистратор, которая не использует OCX. Она регистрирует все нужные библиотеки и вызывает основную программу.

Ответить

Номер ответа: 6
Автор ответа:
 HOOLIGAN



Вопросов: 0
Ответов: 1066
 Профиль | | #6 Добавлено: 29.04.05 14:32
Сделай, чтобы твоя программа запускалась с Sub Main, расположенной в стартовом модуле и первой строкой вставь регистрацию:
 
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-сайт: hw.t-k.ru
 Профиль | | #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-сайт: basicproduction.nm.ru
 Профиль | | #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
Большое спасибо. Кажется, всё получилось. Правда, обнаружился странный глюк, не связанный с этой проблемой. Но это - новая тема, которую я и открыл.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам