LOCALIZAR ARQUIVOS C:WINDOWSSYSTEM

RICOCARDOZO 05/08/2009 13:25:05
#318986
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


WEBMASTER 05/08/2009 13:54:45
#318989
Te um jeito bem mais facil...

Tente criar o objeto, se erro 429 entao nao tem a ocx.


ALEXLUGON 05/08/2009 14:03:28
#318991

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
TECLA 05/08/2009 14:07:18
#318993
...ou, simplesmente assim:

If Dir(Environ([Ô]WINDIR[Ô]) & [Ô]\SYSTEM32\ARQUIVO.OCX[Ô], vbArchive) = [Ô][Ô] Then
MsgBox [Ô]Não tem[Ô]
Else
MsgBox [Ô]Tem[Ô]
End If
RICOCARDOZO 05/08/2009 14:57:51
#319008
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


RICOCARDOZO 05/08/2009 17:33:46
#319036
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?

WEBMASTER 06/08/2009 14:41:23
#319128
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

   
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