Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

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

 

  Вопрос: Не загружаются control'ы Добавлено: 24.04.09 13:16  

Автор вопроса:  Page
Программа использует tabctl32.ocx и FM20.DLL. и всё работает если они лежат в "system32". Но при запуске этой программы на машине где не установлен Office (и устанавливать его там не нужно) который использует FM20.DLL, и нету Visual Basic tabctl32.ocx, выдает ошибку..мол дай их мне. Конечно можно это все выдернуть и поставить, но допустим нет прав админа, тогда эти файлы скопировать в system32 неудасться.
Вопрос как сделать так чтобы эти контролы хранились в корне с самой программой и при запуске она обращалась впервую очередь к ним, а не лезла в системную папку винды.

Ответить

  Ответы Всего ответов: 24  

Номер ответа: 1
Автор ответа:
 Arvitaly



ICQ: 301746136 

Вопросов: 28
Ответов: 549
 Web-сайт: okazani.ru
 Профиль | | #1
Добавлено: 24.04.09 13:59
Переименуй их и регистрируй программно при установке или запуске

Ответить

Номер ответа: 2
Автор ответа:
 Page



Вопросов: 5
Ответов: 20
 Профиль | | #2 Добавлено: 24.04.09 15:12
а как регестрировать? можно подробнее...

Ответить

Номер ответа: 3
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #3 Добавлено: 24.04.09 16:22
Подробности почитай тут
http://www.vbnet.ru/forum/show.aspx?id=12466
Регистрировать это правильно, но незнаю как это под гостем.
Я гдето видел другое решение, по-моему через лоадлибрэри или чтото созвучное.

Ответить

Номер ответа: 4
Автор ответа:
 Page



Вопросов: 5
Ответов: 20
 Профиль | | #4 Добавлено: 24.04.09 18:22
вот нарыл, мож кто поробует разобраться
  1.  
  2. Public Function SafeSlash(ByVal path As String) As String
  3. If Asc(Right$(path, 1)) = Asc("\") Then
  4.     SafeSlash = Left$(path, Len(path) - 1)
  5. Else
  6.     SafeSlash = path
  7. End If
  8. End Function
  9.  
  10. Private Sub Command1_Click()
  11. Dim FSO As New FileSystemObject
  12. Dim fol As Folder
  13. Dim fil As File
  14.     Set fol = FSO.GetFolder(App.path & "\Controls")
  15.     For Each fil In fol.Files
  16.         If Dir(SafeSlash(Environ("windir")) & "\system32\" & fil.Name) = "" Then
  17.             FileCopy fil.path, SafeSlash(Environ("windir")) & "\system32\" & fil.Name
  18.         End If
  19.         Shell "regsvr32 /s " & fil.Name
  20.         List1.AddItem fil.Name
  21.     Next
  22.     
  23.     MsgBox "Registration complite!", vbInformation, "Регистрация компонетов"
  24. End Sub

Ответить

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



Вопросов: 20
Ответов: 285
 Профиль | | #5 Добавлено: 25.04.09 13:35
Регистрировать их можно в любой папке. Но только не под админом вряд-ли что из этого выйдет... Команда регистрации (можно Shell'om):

  1. REGSVR32 filename.ocx


Команда разрегистрации (можно Shell'om):

  1. REGSVR32 /u filename.ocx


можно еще "/s" добавить и тогда никаких сообщений не будет.

Можно еще сделать LoadLibrary на файл, найти там функцию DllRegisterServer и сделать CreateThread на ее адрес... В общем, способов куча...

Ответить

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



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #6
Добавлено: 25.04.09 15:52
>Asc(Right$(path, 1)) = Asc("\";))
хе) а почему не Right$(path, 1) = "\"
>complite
это по-другому пишется
>FileCopy fil.path, <...>
думаю лучше регистрировать прямо там где они лежат, а не переписывать в систем32.
И вообще лучше уж написать bat-скрипт

Ответить

Номер ответа: 7
Автор ответа:
 Page



Вопросов: 5
Ответов: 20
 Профиль | | #7 Добавлено: 25.04.09 20:03
так я и не хочу их перписывать в system32.
Я просто хочу что было так.
(папка с программой): programm.exe FM20.DLL tabctl32.ocx
И все! Чтобы programm.exe использовала FM20.DLL и tabctl32.ocx с каталога где сама лежит.
как это сделать?

Ответить

Номер ответа: 8
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #8
Добавлено: 25.04.09 23:52
положить в папку с программой reg.bat
regsvr /s FM20.DLL
regsvr /s tabctl32.ocx
ну и unreg.bat
regsvr /s /u FM20.DLL
regsvr /s /u tabctl32.ocx
Запустил 1 раз reg, и потом пользуйся программой своей

Ответить

Номер ответа: 9
Автор ответа:
 Page



Вопросов: 5
Ответов: 20
 Профиль | | #9 Добавлено: 26.04.09 00:09
низдраво как-то))) bat запускать потом программу. А если она запускается с CD-ROM например autorun.inf
И че написать туда
[autorun]
open=reg.bat
Каждый раз когда пользователь вставляет компашку у него будет выполняться
regsvr /s FM20.DLL
regsvr /s tabctl32.ocx
вот на .NET эта проблема решена. там если добовляешь сторониий контрол при компиляции он его прописывает там же где и EXE.
Неужели на vb6.0 все так беспантово?

Ответить

Номер ответа: 10
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #10 Добавлено: 26.04.09 01:19
Не так все плохо, просто нужно уметь.
Иногда приходилось таскать ocx/dll на случай если их нет в системе.
Я их паковал в ресурсы экзешника, прога грузилась в Sub Mаin, там я проверял наличие админских прав и осх-ов в системе.
Если были права сливал ресурсы в сис32 и при загрузке формы они автоматом регались, а если прав нет, то юзер посылался к админу :)

Ответить

Номер ответа: 11
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #11 Добавлено: 26.04.09 01:23
Это чтоб не заморачиваться, а вообще под гостем можно слить ресурсы в темп и уже оттуда лоадлибрэри и мир-труд-май :)

Ответить

Номер ответа: 12
Автор ответа:
 Page



Вопросов: 5
Ответов: 20
 Профиль | | #12 Добавлено: 26.04.09 01:27
Smith пишет:
Это чтоб не заморачиваться, а вообще под гостем можно слить ресурсы в темп и уже оттуда лоадлибрэри и мир-труд-май

у меня впринципе уже такая идея была, тока неполучилось осуществить до конца (опыта мало).
Если можешь, опиши как это сделать

Ответить

Номер ответа: 13
Автор ответа:
 Page



Вопросов: 5
Ответов: 20
 Профиль | | #13 Добавлено: 26.04.09 01:29
...всмысле лоадлибрэри из темпа
Page пишет:
 

Если можешь, опиши как это сделать

Ответить

Номер ответа: 14
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #14 Добавлено: 26.04.09 01:42
По вопросам опыта лучше всего обращаться к господину sne.
Поищи тут на сайте VbPhanton,
там все с комментами.

Ответить

Номер ответа: 15
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #15 Добавлено: 26.04.09 01:56
Приведу кусок оттуда
  1. Private Declare Function LoadLibrary Lib "kernel32.dll" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
  2. Private Declare Function FreeLibrary Lib "kernel32.dll" (ByVal hLibModule As Long) As Long
  3. Private Declare Function GetProcAddress Lib "kernel32.dll" (ByVal hModule As Long, ByVal lpProcName As String) As Long
  4. Private Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  5. --------------------------------------------------------------------------------------------------------
  6. --------------------------------------------------------------------------------------------------------
  7.     Private hLib As Long, hProc As Long
  8.  
  9.     hLib = LoadLibrary(TmpPath\Dllfile)             ' Загружаем сохраненную библиотеку
  10.     hProc = GetProcAddress(hLib, "SetGlobalHook4")  ' Вызываем функцию с 4-мя параметрами
  11.     Call CallWindowProc(hProc, vbNull, 0&, 0&, 0&)  ' Вызываем функцию
  12. --------------------------------------------------------------------------------------------------------
  13. --------------------------------------------------------------------------------------------------------
  14.     Call FreeLibrary(hLib)                          ' Освобождаем библиотеку

Ответить

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

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



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