Avatar billede al_pacone Nybegynder
09. februar 2005 - 05:14 Der 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?
Avatar billede martin_moth Mester
09. februar 2005 - 08:35 #1
Mon ikke man kan starte installationen med

shell "C:\install\acces\setup.exe"

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?
Avatar billede martin_moth Mester
09. februar 2005 - 14:03 #2
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.
Avatar billede al_pacone Nybegynder
09. februar 2005 - 15:02 #3
Hvordan/hvor finder jeg stien til setup?
Kan man automatisk gå direkte til fanebladet tilføj programmer?
Avatar billede martin_moth Mester
10. februar 2005 - 08:00 #4
"hvor du finder stien til setup" - Kender du ikke den selv?

Ved ikke om/hvordan du kan gå direkte til windows "tilføj/fjern programemr" - jeg vil tro, at hvis du kan, skal du måske have gang i noget API?

Jeg kan godt se at jeg måske har misforstået spørgsmålet - så ikke at du skulle installere via tilføj/fjern programmer.
Avatar billede al_pacone Nybegynder
11. februar 2005 - 11:03 #5
Fandt selv en løsning.

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&)

Private Const REG_SZ = 1
Private Const REG_EXPAND_SZ = 2
Private Const ERROR_SUCCESS = 0
Private Const HKEY_CLASSES_ROOT = &H80000000

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
Avatar billede al_pacone Nybegynder
11. februar 2005 - 11:05 #6
Hvis man ønsker at kontrollere andre Office programmer.

IsAppPresent("Access.Database\CurVer", "")
IsAppPresent("Excel.Sheet\CurVer", "")
IsAppPresent("PowerPoint.Slide\CurVer", "")
IsAppPresent("Word.Document\CurVer", "")
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester