UAC for Application Developers
page 4 of 5
by James Bender
Feedback
Average Rating: 
Views (Total / Last 10 Days): 25660/ 59

Requesting Administrative Privileges in Your Application

While Visual Studio Orcas and the next version of the .NET Framework (3.5?) will include many of the new features available in Vista, most of us today are using Visual Studio 2005 for production. You can still use all the new features of Vista, including UAC, however, more manual steps are required on our part.

As I stated earlier in this article, for applications in Vista to be able to use feature and functionality that require elevated privileges, the application must inform at launch that they will be requiring those permissions. In this scenario assume you are creating an application called “HelloVista” as a standard .NET 2.0 Winforms application.

The first step is to create a resource file. This is done by right-clicking on your project and selected “Add New Item…” and selecting “text file” from the list. Rename this file ProjectName.rc where ProjectName is the name of the Visual Studio project you are creating the resource script for. Right click on this file and select “Open with…” and select the text editor from the list. Past in the following code.

Listing 1

#define APP_MANIFEST 1 
 #define RT_MANIFEST 24 
 
 APP_MANIFEST RT_MANIFEST ProjectName.exe.manifest

This code will cause the ProjectName.exe.manifest as a manifest resource in your assembly. If you are adding this manifest to an executable, APP_MANIFEST should be set to 1. If your assembly is going to be a DLL, then the value should be set to 2. Save this file.

The next step is to create the manifest file you just specified in your resource script. To do this right click your project and select “Add New Item…” and once again select “text file.” This time you are going to name it ProjectName.exe.manifest where ProjectName is again the name of your project. Open this file and insert the following code.

Listing 2

<?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="HelloVista" 
       type="win32" /> 
   <description>HelloVista</description> 
   <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
     <security> 
       <requestedPrivileges> 
         <requestedExecutionLevel level="requireAdministrator"  /> 
       </requestedPrivileges> 
     </security> 
   </trustInfo> 
 </assembly>

Notice the information in the security element. We are setting the requested execution level to “requireAdministrator” which tells Vista that the application required Administrator privileges to run. The alternative value we could use here is “asInvoker” which allows the process to run with the same access as the parent token, but with no access to “C:\”, “C:\Program Files” or the HKLM node in the registry. The other available value is “highestAvailable” which runs in the highest privileges available to the user. Save this file.

Visual Studio needs to know to compile your resource script into a resource file. This is accomplished by adding the following pre-build step to your projects properties.

Listing 3

"$(DevEnvDir)..\..\SDK\v2.0\bin\rc.exe" /r "$(ProjectDir)$(TargetName).rc"

The last step is one that might be a little scary; we need to hand-edit the Visual Studio project file.  Close Visual Studio and locate your csproj file. Open this in note pad. Find the first <PropertyGroup> tag and add the following line substituting the ResourceFile name with the name of the resource script you created in the first step.

Listing 4

<Win32Resource>ResourceFile.res</Win32Resource>

So your csproj should look something like the one shown below.

Listing 5

<PropertyGroup> 
   <Win32Resource>Project.res</Win32Resource> 
 </PropertyGroup>

Save and reload your project in Visual Studio. Build your application then navigate to the folder and execute your application. You should be asked to confirm the applications request to run with elevated privileges. Congratulations, you just wrote your first UAC compliant application!


View Entire Article

User Comments

No comments posted yet.

Product Spotlight
Product Spotlight 





Community Advice: ASP | SQL | XML | Regular Expressions | Windows


©Copyright 1998-2021 ASPAlliance.com  |  Page Processed at 2021-12-01 7:13:40 AM  AspAlliance Recent Articles RSS Feed
About ASPAlliance | Newsgroups | Advertise | Authors | Email Lists | Feedback | Link To Us | Privacy | Search