For that task there are already some packages. One is NetWizard which includes more than you want.
But, if you want to implement something to control a given application remotely the approach is to develop a kind of agent to be deployed on 1500 machines.
Firts , you should broadcast a message informing the end user for 5 minutes of remaining time.
Next , you send a message to all 1500 agents to stop the application if the end user didn't it.
This agent serach on that machine the process by name or by id and force it to terminate using Kill() ore CloseMainWindow().
The agent could be also running as a service on each of 1500 machines.
When you want to install a new release on that machine , send a message to that service from where to download the installer files (on a given machine or a
and it will do the work and send you back a message when done.
A way to talk a remote service to perform some tasks dynamically is to notify it by updating its .exe.config file. In this case the service has a thread that watches the .exe.config file.
So, your app will modify that file (1500 files), perform tasks and could send back to your app when tasks ate done.
As you can see , you delegate most of work to a service running on the each 1500 machines.
Use Process, System.Net.Sockets, TcpClient, Socket classes to accomplish these tasks.
-obislavu-