[AccessD] Automatic Update Function
David McAfee
davidmcafee at gmail.com
Tue Mar 3 12:31:15 CST 2015
Here's the old, VB.net version that I used for years (I also have a C#
version if you prefer that)
I basically name an .mdb/.adp something like MyDatabase126.mdb
I create a text file and save it as the appName.ini (not .txt)
I create two lines in the ini file:
LatestVersion:MyDatabase126.mdb
DeleteVersion:MyDatabase11*.mdb
They launch the exe, which cecks to see if they already have the latest
version on their computer, if not, copy it over.
I use the wild card * on the delete version (rather than MyDatabase125.mdb)
because a user might be out for a week or two and maybe you had several
versions released.
If you always want to copy the file over rather than check if the file is
different, comment the third IF statement.
It makes it real nice at work to deploy an adp/mdb to a user, even a new
user.
Just copy the .exe to their desktop and let them run it.
It also keeps the honest people honest. They are launching an exe, not an
mdb, so there isn't an mdb they can copy.
If you have an icon for the exe, a splash screen for the mdb and do the
shift start prevention, they might not even know that they are running an
access mdb.
It copies the mdb over to their local app data folder, so unless they know
where to look, they won't find it.
As long as they have rights to the shared folder and don't have to have it
mapped, they wont know where the source files are.
They would need to have Access already installed.
Anyway, here is my launcher:
Imports System.IO
Imports System.Environment
Module Module1
Sub Main()
Dim OldVersion As String = ""
Dim NewVersion As String = ""
Dim AppName As String = ""
Dim NetPath As String =
"\\YourServerNameHere\YourSharedFolderHere$\" + AppName + "\"
Dim iniFileName As String = AppName + ".ini"
Dim LocPath As String =
System.Environment.GetFolderPath(SpecialFolder.LocalApplicationData).ToString
+ "\YourCompanyNameHere\" + AppName + "\"
'Open ini file and read it, to get new version name:
Dim oRead As System.IO.StreamReader
Dim LineIn As String
oRead = File.OpenText(NetPath + iniFileName)
While oRead.Peek <> -1
LineIn = oRead.ReadLine()
If Left(LineIn, 14) = "LatestVersion:" Then
NewVersion = Right(LineIn, LineIn.Length - 14)
ElseIf Left(LineIn, 14) = "DeleteVersion:" Then
OldVersion = Right(LineIn, LineIn.Length - 14)
Else
LineIn = ""
End If
End While
oRead.Close()
If Directory.Exists(NetPath) Then 'If the network path exists,
continue with the local path checks
If Directory.Exists(LocPath) Then 'if the local path exists
then check for the actual file
If Not File.Exists(LocPath + NewVersion) Then 'Check to see
if the new file is already installed
File.Copy(NetPath + NewVersion, LocPath + NewVersion)
'If NOT, copy the file :)
End If
Else 'Directory did not exist, so create it and copy new file
over
Directory.CreateDirectory(LocPath)
File.Copy(NetPath + NewVersion, LocPath + NewVersion)
End If
'If the new file exists on local computer, start the new
version on the local PC
'The IF statement is just added security, there really
shouldn't be a reason for it not to exist at this point
If File.Exists(LocPath + NewVersion) Then
System.Diagnostics.Process.Start(LocPath + NewVersion)
'Start the file
If OldVersion <> "" Then 'Delete old file(s)
For Each FileFound As String In
Directory.GetFiles(LocPath, OldVersion)
File.Delete(FileFound)
Next
End If
Else
'If not found, alert the user
MsgBox("Cannot find " & LocPath & NewVersion & ".",
vbOKOnly, "unable to start " + AppName)
End If
Else 'The network path was unavailable, so alert the user
MsgBox("Network path: " + NetPath + " is unavailable", ,
"Unable to start " + AppName)
End If
End Sub
End Module
More information about the AccessD
mailing list