Are you sure? I don't import Windows.Forms in my service and it writes a log file to c:\ (hardcoded) without any problems. btw, my logwrite function is similar to yours, except I open the file with .AppendText instead.
As to the path question, I'll have to dink around with that when I get into work tommorrow. There has to be a way to get it without a dependency on Windows.Forms and is suitable for use in a service. Another to note is that the working folder for a service maynot be what you expect it to be. I wouldn't be suprised if it always showed up as c:\winnt\system32 or something.
UDP seems to be performing fairly well, but I haven't rolled out the solution quite yet. It will eventually be installed on 1500 computers and what it does is track idle/active intervals and reports it to a stats server. Basically, if there was any input in the last 5min interval it will report "active" otherwise it sends "idle". The actual UDP packet contains the computer name, interval time, and status. This information is then going to be used for future budgeting decisions. So if a dept asks for more computers we can come back and say "You have 20 computers that are on average idle 6 hours a day. Why do you need more?"
Anyways, I have the client service installed on around 50 computers so far and they have been sending stats to the server service for the last 2 months now without fail. The only thing preventing me from doing the final roll out is waiting on Operations next phase.