LOCALIZAR ARQUIVOS C:WINDOWSSYSTEM
Olá a todos
Estou tentando implementar uma lógia no meu sistema :
Estou querendo que ao iniciar o sistema ele procure no diretório windows/system do cliente uma determinada ocx ,se ele encontra-la o programa inicia normalmente.
Caso ele não encontre , ele copia ela para o windows/system do cliente e registra ela.
Tudo via sistema , estou tentando poupar que apareca aqueles erros de ocx e tal.
Como sei que nem sempre os caras usam XP estou partindo deste principio:
Private Declare Function GetSystemDirectory Lib [Ô]kernel32[Ô] Alias [Ô]GetSystemDirectoryA[Ô] (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub Form_Load()
Localiza_arquivo
End Sub
Private Sub Localiza_arquivo()
Dim strWindowsSysdir As String * 20
GetSystemDirectory strWindowsSysdir, 20
Label2.Caption = strWindowsSysdir
[ô]Agora queria saber como localiza , já que estou dentro do C:windows|system
End Sub
Estou tentando implementar uma lógia no meu sistema :
Estou querendo que ao iniciar o sistema ele procure no diretório windows/system do cliente uma determinada ocx ,se ele encontra-la o programa inicia normalmente.
Caso ele não encontre , ele copia ela para o windows/system do cliente e registra ela.
Tudo via sistema , estou tentando poupar que apareca aqueles erros de ocx e tal.
Como sei que nem sempre os caras usam XP estou partindo deste principio:
Private Declare Function GetSystemDirectory Lib [Ô]kernel32[Ô] Alias [Ô]GetSystemDirectoryA[Ô] (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub Form_Load()
Localiza_arquivo
End Sub
Private Sub Localiza_arquivo()
Dim strWindowsSysdir As String * 20
GetSystemDirectory strWindowsSysdir, 20
Label2.Caption = strWindowsSysdir
[ô]Agora queria saber como localiza , já que estou dentro do C:windows|system
End Sub
Te um jeito bem mais facil...
Tente criar o objeto, se erro 429 entao nao tem a ocx.
Tente criar o objeto, se erro 429 entao nao tem a ocx.
Private Declare Function GetSystemDirectory Lib [Ô]kernel32[Ô] Alias [Ô]GetSystemDirectoryA[Ô] (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub Form_Load()
Localiza_arquivo
End Sub
Private Sub Localiza_arquivo()
Dim caminho As String
Dim strWindowsSysdir As String * 20
GetSystemDirectory strWindowsSysdir, 20
caminho = Trim(strWindowsSysdir) & [Ô]MSWINSCK.OCX[Ô]
Label2.Caption = strWindowsSysdir & [Ô]MSWINSCK.OCX[Ô]
If Dir(caminho) Then
MsgBox [Ô]achou a OCX[Ô]
End If
[ô]Agora queria saber como localiza , já que estou dentro do C:windows|system
End Sub
...ou, simplesmente assim:
If Dir(Environ([Ô]WINDIR[Ô]) & [Ô]\SYSTEM32\ARQUIVO.OCX[Ô], vbArchive) = [Ô][Ô] Then
MsgBox [Ô]Não tem[Ô]
Else
MsgBox [Ô]Tem[Ô]
End If
Tecla usei a sua dica
Private Sub Localiza_arquivo()
Dim caminho As String
Dim strWindowsSysdir As String * 20
GetSystemDirectory strWindowsSysdir, 20
Label2.Caption = strWindowsSysdir
If Dir(Environ([Ô]WINDIR[Ô]) & [Ô]SYSTEM32Label3Dcontrol.ocx[Ô], vbArchive) = [Ô][Ô] Then
Label1.Caption = [Ô]Arquivo de Sistema não localizado[Ô]
FileCopy App.Path & [Ô]RuntimesLabel3Dcontrol.ocx[Ô], Label2.Caption
Call Shell([Ô]regsvr32 Label3Dcontrol.ocx[Ô], vbNormalFocus)
Else
Label1.Caption = [Ô]Arquivo de Sistema Encontrado[Ô]
End If
End Sub
só que agora esta dando o seguinte erro na linha que copia o arquivo:
Run Time error 75
Path/file acces error
Private Sub Localiza_arquivo()
Dim caminho As String
Dim strWindowsSysdir As String * 20
GetSystemDirectory strWindowsSysdir, 20
Label2.Caption = strWindowsSysdir
If Dir(Environ([Ô]WINDIR[Ô]) & [Ô]SYSTEM32Label3Dcontrol.ocx[Ô], vbArchive) = [Ô][Ô] Then
Label1.Caption = [Ô]Arquivo de Sistema não localizado[Ô]
FileCopy App.Path & [Ô]RuntimesLabel3Dcontrol.ocx[Ô], Label2.Caption
Call Shell([Ô]regsvr32 Label3Dcontrol.ocx[Ô], vbNormalFocus)
Else
Label1.Caption = [Ô]Arquivo de Sistema Encontrado[Ô]
End If
End Sub
só que agora esta dando o seguinte erro na linha que copia o arquivo:
Run Time error 75
Path/file acces error
Beleza deu certo
Fiz uma gambiarra no meu micro funcionou
Private Declare Function GetSystemDirectory Lib [Ô]kernel32[Ô] Alias [Ô]GetSystemDirectoryA[Ô] (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub Form_Load()
Localiza_arquivo
End Sub
Private Sub Localiza_arquivo()
Dim caminho As String
Dim strWindowsSysdir As String * 20
Dim SourceFile, DestinationFile
GetSystemDirectory strWindowsSysdir, 20
Label2.Caption = strWindowsSysdir
origem = App.Path & [Ô]Runtimes[Ô] & [Ô][Ô] & [Ô]Label3Dcontrol.ocx[Ô]
Destino = Label2.Caption & [Ô][Ô] & [Ô]Label3Dcontrol.ocx[Ô]
If Dir(Environ([Ô]WINDIR[Ô]) & [Ô]SYSTEM32Label3Dcontrol.ocx[Ô], vbArchive) = [Ô][Ô] Then
Label1.Caption = [Ô]Arquivo de Sistema não localizado[Ô]
FileCopy origem, Destino
Call Shell([Ô]regsvr32 /s Label3Dcontrol.ocx[Ô], vbNormalFocus)
Label1.Caption = [Ô]Arquivo de Sistema registrado[Ô]
Else
Label1.Caption = [Ô]Arquivo de Sistema Encontrado[Ô]
End If
End Sub
Só uma questão agora
Este código teria que rodar antes de executar o sistema ,
porque pode dar um erro e nem vai executar o código.
Será que teria de usar um tratamento de erro?
Fiz uma gambiarra no meu micro funcionou
Private Declare Function GetSystemDirectory Lib [Ô]kernel32[Ô] Alias [Ô]GetSystemDirectoryA[Ô] (ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Sub Form_Load()
Localiza_arquivo
End Sub
Private Sub Localiza_arquivo()
Dim caminho As String
Dim strWindowsSysdir As String * 20
Dim SourceFile, DestinationFile
GetSystemDirectory strWindowsSysdir, 20
Label2.Caption = strWindowsSysdir
origem = App.Path & [Ô]Runtimes[Ô] & [Ô][Ô] & [Ô]Label3Dcontrol.ocx[Ô]
Destino = Label2.Caption & [Ô][Ô] & [Ô]Label3Dcontrol.ocx[Ô]
If Dir(Environ([Ô]WINDIR[Ô]) & [Ô]SYSTEM32Label3Dcontrol.ocx[Ô], vbArchive) = [Ô][Ô] Then
Label1.Caption = [Ô]Arquivo de Sistema não localizado[Ô]
FileCopy origem, Destino
Call Shell([Ô]regsvr32 /s Label3Dcontrol.ocx[Ô], vbNormalFocus)
Label1.Caption = [Ô]Arquivo de Sistema registrado[Ô]
Else
Label1.Caption = [Ô]Arquivo de Sistema Encontrado[Ô]
End If
End Sub
Só uma questão agora
Este código teria que rodar antes de executar o sistema ,
porque pode dar um erro e nem vai executar o código.
Será que teria de usar um tratamento de erro?
Vou falar de novo !
Faça uma rotina para ver se o componente esta registrado, eu posso ter um arquivo chamado label32.ocx no meu system e nao ter nada a ver com o arquivo que voce usa
Faça uma rotina para ver se o componente esta registrado, eu posso ter um arquivo chamado label32.ocx no meu system e nao ter nada a ver com o arquivo que voce usa
Option Explicit
Public Function PodeCriarComponente(sComponente As String) As Boolean
On Error GoTo err1
Dim OBJ As Object
Set OBJ = CreateObject(sComponente)
Set OBJ = Nothing
PodeCriarComponente = True
Exit Function
err1:
PodeCriarComponente = False
Exit Function
End Function
Sub teste()
MsgBox [Ô]Pode criar Scripting.FileSystemObject: [Ô] & PodeCriarComponente([Ô]Scripting.FileSystemObject[Ô])
MsgBox [Ô]Pode criar Maiucrusóft.FileSystemObject: [Ô] & PodeCriarComponente([Ô]Maiucrusóft.FileSystemObject[Ô])
End Sub
Tópico encerrado , respostas não são mais permitidas