Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
46 / 8 / 1
Регистрация: 20.08.2010
Сообщений: 53

Возможно ли зарегистрировать OCX в Windows 7 x32 под учетной записью пользователя

05.10.2012, 17:12. Показов 2944. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возможно ли зарегистрировать OCX в Windows 7 x32 под учетной записью пользователя (не админ).. Либо каким то образом использовать OCX в написанной программе из папки с программой ?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.10.2012, 17:12
Ответы с готовыми решениями:

Вход под учетной записью пользователя
Здравствуйте. У меня возникла проблема. Подключался я к адресу 10.10.10.11 по локальной сети. При подключении появилось окно ввода...

Работа с данными под учетной записью
Доброго времени суток, уважаемые форумчане! Не без помощи вашего форума сделал БД для работы под учетными записями. Но т.к. знания в...

Вход под доменной учётной записью
Всем привет. Столкнулся с проблемой. При попытки входа под доменной учёткой не важно куда, что на сам сервер, что на компьютере...

5
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
05.10.2012, 17:52
Цитата Сообщение от TYM Посмотреть сообщение
под учетной записью пользователя (не админ)
- можно, если пользователь входит в группу "Администраторы"
0
46 / 8 / 1
Регистрация: 20.08.2010
Сообщений: 53
09.10.2012, 09:00  [ТС]
Catstail - спасибо за ответ, но меня интересует программная стороная решения вопроса.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
09.10.2012, 09:43
Лучший ответ Сообщение было отмечено как решение

Решение

Вот код, которым пользуюсь я (самодельный инсталлятор):

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
'::: Модуль Setup.bas
 
Public Type FILETIME
       dwLowDateTime    As Long
       dwHighDateTime   As Long
End Type
 
Public Type SECURITY_ATTRIBUTES
       nLength                  As Long
       lpSecurityDescriptor     As Long
       bInheritHandle           As Boolean
End Type
 
Public Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
 
Sub Main()
 
Dim tpfl          As FILETIME
 
Dim CIDs(1 To 10) As String
Dim IIDs(1 To 10) As String
Dim SRVs(1 To 10) As String
Dim FLGs(1 To 10) As Integer
    HKEY_CLASSES_ROOT& = &H80000000
    KEY_ALL_ACCESS& = &HF003F
    '::: Сначала проверка прав...
    lp& = 0
    ret_1& = RegCreateKey(HKEY_CLASSES_ROOT&, "Имя_приложения", lp&)
    ret_2& = RegDeleteKey(HKEY_CLASSES_ROOT&, "Имя_приложения")
    If (ret_1& <> 0) Or (ret_2& <> 0) Then
       show_Err "Для инсталляции Имя_приложения нужны административные права и доступ к реестру Windows.", _
                "Необходимо войти в систему администратором или запустить инсталлятор от имени администратора!"
       Exit Sub
    End If
    CIDs(1) = ""
    IIDs(1) = "{3B7C8863-D78F-101B-B9B5-04021C009402}"
    SRVs(1) = "RICHTX32.OCX"
    CIDs(2) = ""
    IIDs(2) = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}"
    SRVs(2) = "MSCOMCTL.OCX"
    CIDs(3) = ""
    IIDs(3) = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}"
    SRVs(3) = "COMDLG32.OCX"
    CIDs(4) = ""
    IIDs(4) = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}"
    SRVs(4) = "MSFLXGRD.OCX"
    CIDs(5) = ""
    IIDs(5) = "{E316DE6E-F751-11DB-82AA-87E48000BA41}"
    SRVs(5) = "cntAssoList.ocx"
    CIDs(6) = ""
    IIDs(6) = "{F3B998CF-F751-11DB-82AA-87E48000BA41}"
    SRVs(6) = "cntObjList.ocx"
    CIDs(7) = ""
    IIDs(7) = "{D160BB24-9543-454D-892A-797F5E690438}"
    SRVs(7) = "extCombo.ocx"
    CIDs(8) = ""
    IIDs(8) = "{0884D707-5473-4EA5-96B9-2348B928025D}"
    SRVs(8) = "tpw.dll"
    CIDs(9) = ""
    IIDs(9) = "{D2624A77-1438-11D7-8D53-00B0D0D7CD78}"
    SRVs(9) = "xcoder.dll"
    CIDs(10) = ""
    IIDs(10) = "{4D740E1D-016A-4FA2-8700-2D45023902D4}"
    SRVs(10) = "Fuploadn.dll"
    num_comp% = 10
    HomeDir$ = App.Path
    ComDir$ = HomeDir$ + "\Com"
    If Dir$(ComDir$, vbDirectory) = "" Then
       show_Err "Почему-то нет директории \Com", _
                "Возможно, были ошибки при распаковке..."
       Exit Sub
    End If
    '::: Этап-1 Сканирование реестра
    Res1& = RegOpenKeyEx(HKEY_CLASSES_ROOT&, "CLSID", 0&, KEY_ALL_ACCESS&, hSubkey&)
    If Res1& <> 0 Then
       show_Err "Не могу открыть ветвь реестра HKEY_CLASSES_ROOT", _
                ""
       Exit Sub
    Else
       With frmMain
            .Label2.Visible = True
            .Picture1.Visible = False
            .Show
            DoEvents
       End With
       Do
          Buf$ = String$(255, Chr$(0))
          Lb& = 255
          classBuf$ = String$(255, Chr$(0))
          Lcb& = 255
          Res_3& = RegEnumKeyEx(hSubkey&, cEnum&, Buf$, Lb&, 0&, classBuf$, Lcb&, tpfl)
          '::: Достигнут конец ветви...
          If Res_3& <> 0 Then Exit Do
          '::: Извлекли GUID очередного класса
          curr_CLSID$ = Left$(Buf$, Lb&)
          frmMain.Label2.Caption = curr_CLSID$
          DoEvents
          '::: Достанем его InprocServer32
          Prog_Id$ = String$(255, Chr$(0))
          lll& = 255
          CCC$ = "CLSID\" + curr_CLSID$ + "\InprocServer32"
          Res_6& = RegOpenKeyEx(HKEY_CLASSES_ROOT&, CCC$, 0&, KEY_ALL_ACCESS&, hSubkey_1&)
          If Res_6& = 0 Then
             Res_5& = RegQueryValueEx(hSubkey_1&, "", 0&, 1&, ByVal Prog_Id$, lll&)
             If (Res_5& = 0) And (lll& > 1) Then
                SrvNam$ = Left$(Prog_Id$, lll& - 1)
             Else
                SrvNam$ = ""
             End If
             If (Len(SrvNam$) <> 0) Then
                '::: Проверим CLSID
                For i% = 1 To num_comp%
                    If (curr_CLSID$ = CIDs(i%)) And (FLGs(i%) = 0) Then
                       FLGs(i%) = -1
                       GoTo NEXT_COM
                       Exit For
                    End If
                Next i%
                '::: Достанем TypeLib
                CCC$ = "CLSID\" + curr_CLSID$ + "\TypeLib"
                Res_7& = RegOpenKeyEx(HKEY_CLASSES_ROOT&, CCC$, 0&, KEY_ALL_ACCESS&, hSubkey_1&)
                If Res_7& = 0 Then
                   TpLB$ = String$(255, Chr$(0))
                   lll& = 255
                   Res_8& = RegQueryValueEx(hSubkey_1&, "", 0&, 1&, ByVal TpLB$, lll&)
                   If (Res_8& = 0) And (lll& > 1) Then
                      TpLB$ = Left$(TpLB$, lll& - 1)
                   Else
                      TpLB$ = ""
                   End If
                   Res_2& = RegCloseKey(hSubkey_1&)
                   If Len(TpLB$) <> 0 Then
                      '::: Проверим IID
                      For i% = 1 To num_comp%
                          If (TpLB$ = IIDs(i%)) And (FLGs(i%) = 0) Then
                             If Dir$(SrvNam$, vbNormal) <> "" Then
                                FLGs(i%) = -1
                                Exit For
                             End If
                          End If
                      Next i%
                   End If
                End If
             End If
NEXT_COM:
          End If
          cEnum& = cEnum& + 1
       Loop
    End If
    Res_2& = RegCloseKey(hSubkey&)
    '::: Проверим, сколько компонентов нужно регистрировать
    kk% = 0
    For i% = 1 To num_comp%
        If FLGs(i%) = 0 Then
           kk% = kk% + 1
        Else
           If Dir$(ComDir$ + "\" + SRVs(i%), vbNormal) <> "" Then Kill ComDir$ + "\" + SRVs(i%)
        End If
    Next i%
    fo% = FreeFile
    Open HomeDir$ + "\setup.log" For Output As #fo%
    If (kk% > 0) Then
       frmMain.Label2.Visible = False
       frmMain.Picture1.Visible = True
       frmMain.Label1.Caption = "Регистрирую компоненты..."
       WW# = frmMain.Picture1.Width
       HH# = frmMain.Picture1.Height
       DW# = WW# / num_comp%
       For i% = 1 To num_comp%
           x# = DW# * i%
           frmMain.Picture1.Line (0, 0)-(x#, HH#), QBColor(9), BF
           DoEvents
           If FLGs(i%) = 0 Then
              ExecPrg "regsvr32.exe", "/s " + ComDir$ + "\" + SRVs(i%), RC%, 0
              If RC% = 0 Then
                 Tmp$ = SRVs(i%)
                 l% = Len(Tmp$)
                 If l% < 30 Then Tmp$ = Space$(30 - l%) + Tmp$
                 Print #fo%, Date$; " "; Time$; " "; Tmp$; " "; IIDs(i%)
              Else
                 MsgBox "Ошибка при регистрации компонента " + SRVs(i%) + " RC=" + Str$(RC%)
              End If
           End If
       Next i%
    End If
    Close #fo%
    frmMain.Hide
End Sub
 
Sub show_Err(Txt1 As String, Txt2 As String)
    frmErr.lbl1.Caption = Txt1
    frmErr.lbl2.Caption = Txt2
    frmErr.Show 1
    End
End Sub

Некоторые комментарии:

1) код VB (не VBA) и требует некоторой адаптации
2) инсталлятор - саморазворачивающийся RAR, у которого установлен автозапуск setup.exe
3) для компонентов создается поддиректория \Com и в нее запаковываются компоненты (ocx,dll)
4) при инсталляции проверяется есть ли на целевом ПК компонент с данным GUID-ом. Если есть регистрация этого компонента не выполняется, а сам компонент удаляется из \Com. Если есть - компонент регистрируется и делается запись в setup.log

"Имя_приложения" - это имя вашего приложения.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
09.10.2012, 18:40
Catstail, а получится ли точно так же с OCX,
как я описывал способ c DLL в теме: Регистрация ActiveX-DLL без прав администратора (UAC включен)
?
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,680
Записей в блоге: 14
10.10.2012, 21:51
Как я понял, у Вас цель была несколько другая: зарегистрировать без regsvr32... Или я не прав?
В моем коде я явно вызываю regsvr2 (предварительно попытавшись создать что-либо в реестре, чтобы убедиться,что прав хватает).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.10.2012, 21:51
Помогаю со студенческими работами здесь

Количество пользователей под 1 учетной записью
Добрый день! Прошу заранее если подобные темы уже были и не кидаться камнями, я только начал читать книгу PHP 7 в подлиннике. Дмитрий...

Войти под другой учетной записью
Вин 10, стартовый экран залочен на одну единственную учетку, кнопочки войти под другой учетной записью не вижу. Есть варианты только сон,...

Подскажите как мне пустить на сервер Пользователя с учетной записью (Пользователь) ?
Он мне говорит что что вход на даний компютер запрещен ? За ранее благодарен.

Runas не работает под системной учётной записью
здравствуйте. проблема такая: если в запущенной под системной уч. записью командной строке выполнить runas /user:2013 cmd и ввезти...

Запуск msg под определенной учетной записью
День добрый. Ситуевина: есть сеть на базе AD. Сам контролер на 2003 сервере. станции вперемешку ХП и 7. есть скриптик прикольный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru