Probably many ways to do this, and one of them is:
If
ALL machines can access one, single, MS Access back-end database (containing tables only if required), stored on ONE, SINGLE machine, then any activity that you wish to be 'fired' can be.
If ALL machines had 'open' access (say as admin) to this centralised db', then Machine A could tell Machine B to execute Notepad.exe, and vice-versa. (Although I don't think that's what you had in mind).
The back-end would contain table(s) that record:
*) Table of applications that each machine must 'look out' for and report to the above table with.
*) Table of central 'control' info, such as 'how often each machine should 'poll' it's environment to check for running applications, or, if to run an application.
Each machine could have standard functionality coding such as "Kill Application: " (and append the application name at run time - from the central db), or, each type of command stored in the central back-end.
The key point here is: if the USER of any of these machines has permissions to run or kill any application ON THAT MACHINE, then, the MS Access Application (front-end) on that machine is effectively THAT USER, and MS Access can initiate exactly what that user can initiate.
As for 'versioning', then:
a) It would be advisable to write the MS Access code in the lowest common denominator version (for all machines). E.g. all machines run exactly the same app version (even if they are using different MS Access).
b) The single, centralised 'back-end' database would store command options for every operating system type, so that if a Windows 10 machine was looking for instruction - it would signify that it was Windows 10 and thus retrieve only the Windows 10 command format, whereas an Win XP machine would indicate that it is XP and retrieve the Windows XP format command (if there was any difference).
It's all a matter of 'flags' in the CENTRAL database being changed, the machine A / B / C front-end apps polling that central database for 'flags' in data, which indicate to them that they should 'execute xyz' etc.
If I make this sound simple - it is, but, it all depends on:
1) permissions
2) all machines having visibility of one central database
3) the front-ends (on different machines) all running (somehow), (and even this can be automated with wake-on-lan and a startup script).
4) all different op sys command formats / application name differences stored in the back-end.
Scenario table:
tblDoIt:
Code:
PC Active ExecuteMe
-- ------ -----------
A False Notepad.exe
B True Notepad.exe
C False Notepad.exe
1) Admin changes Active field flag in this back-end table, for Machine B to True.
2) Machine A, B and C all are all 'polling' that database table (via a form timer event), with the following, (but 'AND PC = 'B' changes to 'AND PC = 'A' (for machine A) and 'AND PC = 'C' (for machine C):
Code:
"SELECT ExecuteMe "
"FROM tblDoIt "
"WHERE Active = True "
"AND PC = 'B' "
Only Machine B would retrieve a record with "Notepad.exe" in the 'ExecuteMe' field, and then all it takes is a 'SHELL' command from Machine B to execute 'Notepad.exe' on Machine B.
Think of it this way: if lot's of client machines, running your MS Access app can access MS Outlook and automatically send an email to hundreds of their contacts - (without the user doing anything) - this, is effectively what you are trying to do.
So yes, it can be done (I've done it (with hundreds of client machines), although not exactly this scenario).
ATB,
D
Never argue with an idiot, he'll bring you down to his level - then beat you with experience.