Our way to achieve this is the litte web service, which runs on our servers, which controls a specific directory for new files. Our assembly deploys the Windows services in this folder with a temporary name and then renames them to the tracked name template ("servicename.deployservice.zip"), the deployment service will take such a file, unzip it to a temporary location and perform the necessary steps for deployment (for example, stop the old service, delete the old service, install the new service, start the new service). If you need to move special actions, you can add the deployment DLL or "build script" to the deployment ZIP file.
The easiest way to execute such deployment code with most common ones is to use a service that just waits for the installation (msi or something else) in the zip file and does it. That way, you can just add the deployment setup to your project and make very less in your Teambuild ...
eFloh source share