This came from one of my favorites in the C# newsgroup, Willy DeNoyette. I'll simply post the questions and answers directly, since there is no need to modify it except for some formatting and cleanup:
Q) I need to restart the "Windows Audio Service" (audiosrv) via C#. I'm using the ServiceController Class to do this.
It is no problem under XP and no problem under vista if UAC is disabled.
But with enabled UAC i'm getting a "access refused" exception.
I also tried to do it via console with "net start ..." but the same error appears.
1. Is it possible to restart the "windows audio service" if UAC is
A) Yes when running as full "Administrator". That is start the console (cmd interpreter) by right clicking "Run as Administrator".
2. Why does the exception occur? If I do some other stuff, e.g. starting regedit via Process.Start() the user gets asked if he really wants that. I would expect the same behaviour for restarting
A) The exception occurs because you are running as a standard user, only admins can start, stop .... services.
If you want the same behavior you'll have to insert a "manifest" in your executable file.
<?xml version="1.0" encoding="utf-8" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" >
<requestedExecutionLevel level="requireAdministrator" />
To add above manifest to the executable assembly, you have to run mt.exe like this:
mt -manifest somename.exe.manifest -outputresource:somename.exe;#1
PS change the someExecName and Program description to suit your needs...
3. If it's not possible at all: Can I find out programmatically
whether UAC is enabled?
A) See above
To further clarify:save the above manifest in a file called "some.exe.manifest", where someApp is the name of your executable file. Say you have "audioCntrl.exe", then you could name your manifest "audioCntrl.exe.manifest" and run mt.exe like:
mt -manifest audioCntrl.exe.manifest -outputresource:audioCntrl.exe;#1