Convidado 23/1/2013, 03:43
'---------------------------------------------------------------------------------------
' Procedure : RegistraBiblioteca
' Author : Harysohn P. Pina (PILOTO) - Harysohn@hotmail.com
' Fórum : Fórum Máximo Access - http://maximoaccess.forumeiros.com/
' Date : 23/1/2014
' Comentários : Registra Dll e Ocx em WinXP e Win7 e ativa referências
'---------------------------------------------------------------------------------------
Function RegistraBiblioteca()
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
On Error GoTo TrataErro
Dim NomeProcedimento As String
NomeProcedimento = "RegistraBiblioteca"
'Adiciona o nome do procedimento à função
PegaProcedimento (NomeProcedimento)
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dim varFile As Variant, nRef As String, varPath As String
Dim ref As Reference
Dim fso, Pasta, Arquivo
Dim StrDestino As String
'Checa a tabela para verificar se as referências foram instaladas
If DCount("*", "tblSistemasDependentes", "SistemaDependente = 'Registro de Bibliotecas' And Instalado = True") = 1 Then Exit Function
MsgBox "Instalando Referências", vbInformation, "INSTALAÇÃO REFERÊNCIAS"
Set fso = CreateObject("Scripting.FileSystemObject")
Set Pasta = fso.GetFolder(CurrentProject.Path & "\dll\")
'Carrega caminho na variável para checar a versão do windows
StrDestino = "C:\Windows\SysWow64"
'Se não existe o caminho em StrDestino, WindowsXP
If Len(Dir(StrDestino, vbDirectory) & "") = 0 Then
'Busca pelos arquivos de bibliotecas dentro da pasta dll na pasta do sistema
For Each Arquivo In Pasta.Files
nRef = Arquivo
'Carrega a variável com o caminho do Windows e o nome da biblioteca
varPath = "C:\Windows\System32" & right(nRef, Len(nRef) - Len(Pasta))
'Se a biblioteca já está dentro da pasta System32 no windows não é instalada
If Len(Dir(varPath, vbDirectory) & "") = 0 Then
'Copia a biblioteca para a pasta system32 no windows
FileCopy nRef, varPath
'Registra a Dll
Shell "regsvr32/s """ & varPath & "", vbNormalFocus
'Pesquisa pelas referencias
For Each ref In References
If ref.FullPath = nRef Then
varPath = "Sim"
End If
Next ref
If varPath = "Sim" Then
'MsgBox "Referência já existe"
Else
'Adiciona a referência no projeto
Set ref = References.AddFromFile(nRef)
'MsgBox "Referência adicionada: " & ref.FullPath, vbOKOnly + vbInformation, "SUCESSO"
End If
End If
'Continuar:
Next Arquivo
'Atualiza a tabela para marcar como instalado as referências
CurrentDb.Execute "UPDATE tblSistemasDependentes set Instalado =1 WHERE SistemaDependente='Registro de Bibliotecas'"
'Se existe o caminho em StrDestino, Windows7
Else
For Each Arquivo In Pasta.Files
nRef = Arquivo
'Carrega a variável com o caminho do Windows e o nome da biblioteca
varPath = "C:\Windows\SysWow64" & right(nRef, Len(nRef) - Len(Pasta))
'Se a biblioteca já está dentro da pasta System32 no windows não é instalada
If Len(Dir(varPath, vbDirectory) & "") = 0 Then
'Copia a biblioteca para a pasta system32 no windows
FileCopy nRef, varPath
'Registra a Dll
Shell "regsvr32/s """ & varPath & "", vbNormalFocus
'Pesquisa pelas referencias
For Each ref In References
If ref.FullPath = nRef Then
varPath = "Sim"
End If
Next ref
If varPath = "Sim" Then
'MsgBox "Referência já existe"
Else
'Adiciona a referência no projeto
Set ref = References.AddFromFile(nRef)
'MsgBox "Referência adicionada: " & ref.FullPath, vbOKOnly + vbInformation, "SUCESSO"
End If
End If
Next Arquivo
End If
Exit Function
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'Tratamento de Erros
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Exit_TrataErro:
DoCmd.Hourglass False
DoCmd.Echo True
Exit Function
TrataErro:
Select Case err.Number
Case 0
'Não é um erro
Case Else
DoCmd.Hourglass False
DoCmd.Echo True
'Chama a função global de tratamento de erros
GlobalErrHandler ("mdlRegstroDll")
End Select
End Function
Eu apliquei com a opção /s .. mas não funcionou.
Grato