Some approaches:
1) use a thread pool user other than the built-in ones: create a dedicated technical user. It is better for security and other reasons too.
(you could set the pool to load user profile too, there are many advantages of it, for example you can print from asp.net on server side)
2) how to access remote resources
a) if you are in a domain, this technical user can be a domain user, thus cross-server trust is there by default
b) if the technical user is local, forget calling cli, try this one to access remote share:
UNCAccess[
^]
c) you can impersonate a user only for a portion of the execution:
A small C# Class for impersonating a User[
^]
3) you can even start process in the name of the impersonated user, see:
http://support.microsoft.com/kb/889251[
^]