Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Restarting a Windows Service with C# under Vista when User Account Control is Enabled

16 views
Skip to first unread message

gourmet

unread,
Apr 3, 2007, 7:29:28 AM4/3/07
to
Hello!

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.
Three questions:
1. Is it possible to restart the "windows audio service" if UAC is
enabled ?
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
services.
3. If it's not possible at all: Can I find out programmatically
whether UAC is enabled?

Thanks and excuse my bad english!

Willy Denoyette [MVP]

unread,
Apr 3, 2007, 10:40:51 AM4/3/07
to
"gourmet" <tr...@jos.zzn.com> wrote in message
news:1175599768....@o5g2000hsb.googlegroups.com...

> Hello!
>
> 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.
> Three questions:
> 1. Is it possible to restart the "windows audio service" if UAC is
> enabled ?

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
> services.

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">
<assemblyIdentity version="1.0.0.0"
processorArchitecture="X86"
name="someExecName"
type="win32" />
<description>Program description</description>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" />
</requestedPrivileges>
</security>
</trustInfo>
</assembly>

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?

See above.

Willy.

Willy Denoyette [MVP]

unread,
Apr 3, 2007, 10:53:02 AM4/3/07
to
"Willy Denoyette [MVP]" <willy.d...@telenet.be> wrote in message
news:up02U4fd...@TK2MSFTNGP03.phx.gbl...


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

Willy.
PS. type mt /help from the command line for more detailed help on mt.


gourmet

unread,
Apr 4, 2007, 5:52:11 AM4/4/07
to
Thank you very much!

I will try that manifest stuff on friday and will let you know if it
worked for me...


0 new messages