Search code examples
vb.netvisual-studiolan

How do i link Visual Studio applications over LAN


I have created a VS application , I have installed a copy on another computer and I wish to link them via LAN so that if settings are canged in one , the others setings will also be saved .

for example this setting

i created a new name in the sttings are and call it "AdminIn" and set its type it integer , its scope to user and set its value to 0

    Dim AI As New My .MySettings

 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    AI.AdminIn = AI.AdminIn + 1
Ai.SAve()

End Sub

now how can AI also be updated in the other application on the other computer .

How do I connect via LAN and accomplish this ?


Solution

  • I found this link that provides some example code to modify application-scoped variables from My.Settings that might be useful. I've tested it out with a simple form with a timer and a label showing me the current value of the AdminIn setting, and it seems to work. The timer updates the label on every instance of the form by checking the reloaded My.Settings value. The variable would need to be application scoped in order to be accessible to all users on any machine that may run the executable.

    http://www.codeproject.com/Articles/19211/Changing-application-scoped-settings-at-run-time

    Here's the form code that I put together to keep the current admin count up-to-date. Very simplistic, but it seems to do the job neatly.

    Public Class Form1
    
        Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
            'Decrement the AdminIn count when the current instance of the form is closed.
            Me.tmrAdminCheck.Stop()
            ChangeMyAppScopedSetting((My.Settings.AdminIn - 1).ToString)
            'Reload the .exe.config file to synchronize the current AdminIn count.
            My.Settings.Reload()
            My.Settings.Save()
        End Sub
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            'Increment the current AdminIn count when a new instance of the form is loaded
            ChangeMyAppScopedSetting((My.Settings.AdminIn + 1).ToString)
            'Reload the .exe.config file to synchronize the current AdminIn count.
            My.Settings.Reload()
            My.Settings.Save()
    
            Me.lblAdminsIn.Text = "Current Admins In: " & My.Settings.AdminIn.ToString
            'Start the timer to periodically check the AdminIn count from My.Settings
            Me.tmrAdminCheck.Enabled = True
            Me.tmrAdminCheck.Interval = 100
            Me.tmrAdminCheck.Start()
            Me.Refresh()
            Application.DoEvents()
        End Sub
    
        Private Sub tmrAdminCheck_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tmrAdminCheck.Tick
            'Reload the .exe.config file to synchronize the current AdminIn count.
            My.Settings.Reload()
            Me.lblAdminsIn.Text = "Current Admins In: " & My.Settings.AdminIn.ToString
            Me.Refresh()
            Application.DoEvents()
        End Sub
    End Class
    

    I've found a couple of things with this method, and they relate to what others have already mentioned in their comments:

    1. The application's .exe.config file must be in an accessible location (the CodeProject example defaults to the application's executable directory). Of course, you could save the settings to an INI file or some other configuration file in another shared directory and accomplish a similar thing, but this method uses the My.Settings.
    2. You'll may want to do some additional checking for the possibility of two people attempting to get in at exactly the same time. If that happens, the configuration file will still be open and locked, and the new AdminIn value won't be saved. The CodeProject example doesn't have any exception handling, but you could easily work this functionality into the exception handling by making a recursive call to the Sub.

    Otherwise, this seems to be a totally viable method of accomplishing what you're talking about.