09. februar 2005 - 05:14Der er
5 kommentarer og 1 løsning
Installere Access via add/remove program
Kan man via VB fjerne / tilføje programmer? Jeg ønsker først at finde ud af om Access er installeret. Og hvis det ikke er, så installere det via add/remove program, hvor Access ligger klar til at blive installeret. Det er noget jeg skal bruge på jobbet, hvor hver enkelt bruger selv kan installere programmer alt efter behov, via add/remove program. Kan det lade sig gøre automatisk, eller skal brugeren starte installationen manuelt?
Ved ikke hvordan man ser om access er installeret. Men du kan jo søge på MSACCESS.EXE på C:\ og er den der ikke, er access ikke installeret. Og så kører du ovenstående shell. Er det et vej frem?
Dette her virker, er lavet efter ovenstående princip... Lav en form, smid en knap på den og test...
Private Sub Command1_Click() Dim fso As Scripting.FileSystemObject Set fso = New Scripting.FileSystemObject If FindFile("MSACCESS.EXE", fso.GetFolder("C:\Program Files\Microsoft Office\Office")) = True Then If vbYes = MsgBox("Du har access installeret, ser det ud til. Installetaion går i gang. OK?", vbYesNo) Then Shell "c:\...", vbMaximizedFocus 'RET STIEN TIL DIN SETUP-FIL Else MsgBox "Du valgte ikke at installere noget" End If End If
Set fso = Nothing End Sub Private Function FindFile(pattern As String, folder As Scripting.folder) As Boolean
FindFile = False Dim tmpFolder As Scripting.folder Dim tmpFile As Scripting.File If folder.SubFolders.Count > 0 Then For Each tmpFolder In folder.SubFolders FindFile pattern, tmpFolder Next End If If folder.Files.Count > 0 Then For Each tmpFile In folder.Files If InStr(1, LCase(tmpFile.Name), LCase(pattern)) Then FindFile = True
Exit Function End If Next End If
End Function
Der er måske en lettere måde at se om access er installeret på. Men ovenstående virker.
Private Declare Function RegOpenKey Lib _ "advapi32" Alias "RegOpenKeyA" (ByVal hKey _ As Long, ByVal lpSubKey As String, _ phkResult As Long) As Long
Private Declare Function RegQueryValueEx _ Lib "advapi32" Alias "RegQueryValueExA" _ (ByVal hKey As Long, ByVal lpValueName As _ String, lpReserved As Long, lptype As _ Long, lpData As Any, lpcbData As Long) _ As Long
Private Declare Function RegCloseKey& Lib _ "advapi32" (ByVal hKey&)
Public Function GetRegString(hKey As Long, _ strSubKey As String, strValueName As _ String) As String Dim strSetting As String Dim lngDataLen As Long Dim lngRes As Long If RegOpenKey(hKey, strSubKey, _ lngRes) = ERROR_SUCCESS Then strSetting = Space(255) lngDataLen = Len(strSetting) If RegQueryValueEx(lngRes, _ strValueName, ByVal 0, _ REG_EXPAND_SZ, ByVal strSetting, _ lngDataLen) = ERROR_SUCCESS Then If lngDataLen > 1 Then GetRegString = Left(strSetting, lngDataLen - 1) End If End If If RegCloseKey(lngRes) <> ERROR_SUCCESS Then MsgBox "RegCloseKey Failed: " & _ strSubKey, vbCritical End If End If End Function
Function FileExists(sFileName$) As Boolean On Error Resume Next FileExists = IIf(Dir(Trim(sFileName)) <> "", _ True, False) End Function
Public Function IsAppPresent(strSubKey$, _ strValueName$) As Boolean IsAppPresent = CBool(Len(GetRegString(HKEY_CLASSES_ROOT, _ strSubKey, strValueName))) End Function
Private Sub Command1_Click() Dim dblReturn As Double 'Kontrollerer om Access er installeret If IsAppPresent("Access.Database\CurVer", "") = False Then MsgBox "Access er ikke installeret" 'Åbner tilføj/fjern programmer dblReturn = Shell("rundll32.exe shell32.dll,Control_RunDLL appwiz.cpl,,1", 5) Else MsgBox "Access er installeret" End If End Sub
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.