One technique that will make it pretty difficult for the end user is to simply not give them a full desktop. Instead of giving them a windows shell where the can manage files and copy them, instead expose your application as a remote app. Also heavily lock down the system with group policies to prevent starting explorer.exe, command shells and other tools from the file open/save dialogs. This wouldn't completely stop a extremely skilled individual, but it should discourage the average computer user.
If you need a full desktop, you could setup a couple terminal servers, one server to provide your full desktop, and a second server to provide your remote apps within the terminal server environment.
If running a remote app isn't an option then you probably will need do a lot of work to lock down the system with group policies. With group policies you can prevent a user from browsing drives in Windows explorer and the standard Windows file dialogs. This would discourage most people, but it might make your system more difficult to use then your users are willing to accept. It depends on your requirements.
Another option might be to deliver your application with something like app-v. It is a technology where the application is not actually installed on the server. You need a special client to run the software. If your infrastructure is fast enough, then you would disable caching of the application files. I am not extremely familiar with the app-v internals to know if a determined person could extract a copy of the program from the cache, I suspect they could, but I don't think App-v is not common enough that it might make it difficult enough.