REGISTRAR OCX
Quando se copia uma ocx para a pasta de sistema no windows 7 tudo bem , tem que ter permissão de administrador , agora estou tentando registrar no diretorio do exe ele tinha que rodar direto , eu acho.
Tinha que arrumar uma maneira de passar direto pelo uac , dai só faria uma mudança basica , copiaria as ocx para a pasta do system32 e registrava lá.
Só que isso requer muita pesquisa e leva tempo ou perca de tempo.
Se os nossos sistemas operacionais só fosse o XP tudo bem, mas se tratando de 7 ou 8 ai a coisa complica ... e vale a opnião dos colegas que postaram aqui ... como o inno, permissão de admistrador etc
Seria interessante mesmo o EXE fazer tudo ... seria legal mesmo.
Voce vai ter que pesquisar se tem como driblar o uac, registrar componentes como adinistrador .... se der certo posta ai ...
Eu tenho alguns sistemas que também fazem os registros em OCX[ô]s, qual o caminho que eu segui para resolver o problema e funciona perfeitamente.
Se for algo comercial que é enviado para o cliente, no seu banco de dados crie uma tabela chamado [Ô]Registro[Ô] pode ser uma string ai fica ao seu critério.
Segue um exemplo do codigo:
Citação:Declare Function GetSystemDirectory Lib [Ô]kernel32[Ô] Alias [Ô]GetSystemDirectoryA[Ô] (ByVal lpBuffer As String, ByVal nSize As Long) As Long
sub main()
Dim tableConfiguracao As New ADODB.Recordset
tableConfiguracao.Open [Ô]Select * from Registro[Ô], banco, adOpenDynamic, adLockOptimistic
If tableConfiguracao!registro = [Ô]Não[Ô] Then
If GetVersion32 = [Ô]95/98[Ô] Then
a = Chr(34) & SystemDir & [Ô]regsvr32.exe[Ô] & Chr(34) & [Ô] [Ô] & Chr(34) & App.Path & [Ô]\3DChartM.ocx[Ô] & Chr(34)
Shell a
MsgBox [Ô]Welcome[Ô], vbInformation
Else Then
a = Chr(34) & SystemDir & [Ô]regsvr32.exe[Ô] & Chr(34) & [Ô] [Ô] & Chr(34) & App.Path & [Ô]\3DChartM.ocx[Ô] & Chr(34)
Shell a
a = Chr(34) & SystemDir & [Ô]regsvr32.exe[Ô] & Chr(34) & [Ô] [Ô] & Chr(34) & App.Path & [Ô]\3DChartMU.ocx[Ô] & Chr(34)
Shell a
MsgBox [Ô]Welcome[Ô], vbInformation
End If
tableConfiguracao!registro = [Ô]Sim[Ô]
tableConfiguracao.Update
End If
tableConfiguracao.Close
End Sub
Function SystemDir() As String
[ô] determina o atual diretorio system => windows\system
[ô] Examplo - Mydir2 = SystemDir
Dim x As Long
Dim strPath As String
strPath = Space$(1024)
x = GetSystemDirectory(strPath, Len(strPath))
strPath = Left$(strPath, x)
If Right$(strPath, 1) <> [Ô]\[Ô] Then strPath = strPath & [Ô]\[Ô]
SystemDir = strPath
End Function
Public Function GetVersion32() As String
[ô] Os valores retornados sao [Ô]95[Ô] or [Ô]NT[Ô] or [Ô]Desconhecido[Ô]
[ô] Examplo - MyString = GetVersion32
[ô]
OsVers.dwVersionInfoSize = 148&
GetVersionEx OsVers
If OsVers.dwPlatform = 1& Then
GetVersion32 = [Ô]95/98[Ô]
ElseIf OsVers.dwPlatform = 2& Then
GetVersion32 = [Ô]NT[Ô]
Else
GetVersion32 = [Ô]Desconhecido[Ô]
End If
End Function
A grande vantagem disso é que não precisa de permissão de administrador desta forma, eu nunca testei, mas pode funcionar para o que você quer, segue o link
http://www.codeproject.com/Articles/3505/RegSvrEx-An-Enchanced-COM-Server-Registration-Util
Eu percebi que tem algo relacionado com o office 2007 , que é o que está instalado nas maquinas do escritório.
De alguma forma ao tentar registrar a ocx nos micros com o windows 7 e o office 2007 ele abre a tela do installer e a tela do office 2007.
Vi que na minha aplicação tinha a MSCOMCTL.OCX mais atualizada que dos micros dai fiz o seguinte:
Apaguei a MSCOMCTL.OCX do system32 no windows 7 e executei o meu exe , continua a aparecer as telas de configuração do office , e quando volto lá no diretorio do system32 esta lá a MSCOMCTL.OCX antiga e não a do meu sistema.
A que está no computador é a versão : Ver 6.1.95.45
A que esta no meu executavel é a : ver 6.1.97.86
O que me parece é que ao executar o Shell ([Ô]regsvr32.exe mscomctl.ocx /s[Ô]) ele atualiza o office e mantem a ocx do office.