I would believe as a System Administrator,you do have the credentials for the users of your network. I also assume you can access the network users files. I will be taking the assumption as a reality and offer my solution to your problem.
You are making your application\software more complex than it should be. There are Native Windows API functions available for these type of concepts and problems.
First you must create a connection with the targets using WNetAddConnection2()
MSDN Documentation on WNetAddConnection2():
Then call the function with the correct parameters (NETRESOURCE struct) as proposed by MSDN then check the return value of the function, if return value is NO_ERROR (#define NO_ERROR 0L) the connection is successful else call GetLastError function then check it across with
MSDN System Error Codes:
After the successful connection the remote machine will become a file descriptor then you can copy your files across and also copy your application in because you can also get that to spread the file(s), in order to execute it just call ShellExecute()
function to execute the files remotely therefore everything is automated.
MSDN Documentation on ShellExecute()
Be careful and put a lot of error checking mainly about self-information beucase the first entry of the program will always be the same unless you did PE patching and such so compare the targets with itself so that the computer does not execute it on itself again which will cause a infinite loop.
Notice: Before you download & execute the files and such on remote machines make sure that the targets are online via doing a ICMP request & response check in order to verify if the target is online or not. If the target is not online do not download and execute if else download and execute becuase after all there is not point trying to make a connection with something offline.
There are few more solutions to effectively & with agility determine the remote network status such as TCP but do not use UDP because there is a chance it will not get there.