Alessandro Del Sole's Blog

{ A programming space about Microsoft® .NET® }

  Home :: Contact :: Syndication  :: Login
  1125 Posts :: 64 Stories :: 1443 Comments :: 236 Trackbacks

News

Your host

This is me! Questo spazio è dedicato a Microsoft® .NET®, di cui sono molto appassionato :-)

These postings are provided 'AS IS' for entertainment purposes only with absolutely no warranty expressed or implied and confer no rights.
If you're not an Italian user, please visit my English blog

Microsoft MVP

My MVP Profile

My MVP Corner Page

Il mio libro su LINQ!

Il mio nuovo libro su Microsoft LINQ E' uscito il mio libro "Microsoft LINQ in Visual Basic 2008". Clicca sulla copertina per informazioni!

Visual Basic Tips & Tricks Team Member

Le vostre visite

I'm a VB!

Guarda la mia intervista a Seattle

Windows Live Alerts

Vsi Builder 2008

Il mio tool per VS 2005/2008 Scarica Vsi Builder, il mio tool per Visual Studio 2005/2008!

Aggiungimi al Social MSDN!

Dove vivo

Contattami su Messenger


Grab this badge here!

OmniaDoc by AB Sistemi

CyberInstaller Beta Tester

Scarica il nuovo CIS 2009!!

Altri spazi

CodePlex download Scarica i miei progetti open-source su CodePlex!

Cerca nel blog



Article Categories

Archives

Post Categories

Image Galleries

.NET Framework

Back to basics

Blogroll

Help 1.x e 2.0

Microsoft & MSDN

Setup & Deployment

Visual Basic .NET e 2005

Visual Studio 2008, oltre ad essere progettato per lavorare con Windows Vista, consente di creare applicazioni per le quali sia possibile specificare il livello di privilegi richiesti nell'ambito dell'UAC di Vista, mediante un apposito file di manifesto.

Ogni qual volta si crea un'applicazione Windows (Windows Forms, Windows Presentation Foundation e Console) Visual Studio 2008 genera un file chiamato App.manifest, che è possibile modificare aprendo la finestra My Project di Visual Basic 2008, facendo clic sulla scheda Application, quindi clic sul pulsante View UAC Settings. Non ho trovato analogo pulsante in Visual C#, mentre, per questo linguaggio, il file di manifesto l'ho trovato impostando la visualizzazione di tutti i file, sfogliando la cartella Bin. C'è un file con estensione .vschost.exe.manifest che contiene il manifesto. Mi sembra strano sia così macchinosa la cosa in C#, cercherò di documentarmi meglio.

In ogni caso, almeno in Visual Basic, il file App.manifest viene aperto nell'editor XML incorporato in Visual Studio (anche nelle edizioni Express). Facendo delle prove, ho notato che il file è identico in tutti i tipi di applicazione sopra specificato e quello che segue è il suo codice XML:

<?xml version="1.0" encoding="utf-8"?>
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" 
                xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" 
                xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" 
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
        <!-- UAC Manifest Options
            If you want to change the Windows User Account Control level replace the 
            requestedExecutionLevel node with one of the following.

        <requestedExecutionLevel  level="asInvoker" />
        <requestedExecutionLevel  level="requireAdministrator" />
        <requestedExecutionLevel  level="highestAvailable" />

            If you want to utilize File and Registry Virtualization for backward 
            compatibility then delete the requestedExecutionLevel node.
        -->
        <requestedExecutionLevel level="asInvoker" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</asmv1:assembly>
La parte di primario interesse è rappresentata dal nodo Security, al cui interno risiede l'elemento requestedPrivileges. 
Fortunatamente, i commenti inseriti all'interno del file ci sono di grande aiuto. Si tratta, infatti, di impostare l'attributo Level dell'elemento 
requestedExecutionLevel utilizzando uno dei valori suggeriti nei commenti, che riporto di seguito con la relativa spiegazione:

Valore attributo Level

Significato
asInvoker Utilizza il livello di privilegi per utenti standard
requireAdministrator Richiede che l'utente che esegue l'applicazione sia del gruppo Amministratori
highestAvailable Richiede il più alto livello di privilegi possibile per l'utente corrente.

Come potete notare, l'IDE specifica automaticamente il livello di privilegi per utenti standard (asInvoker), che è la scelta forse più opportuna, a meno che l'applicazione non debba fare ricorso a particolari risorse di sistema.

Durante la generazione dell'assembly, il manifesto viene incorporato e consente una migliore interazione col nuovo sistema operativo di Microsoft.

Alessandro

posted on Tuesday, November 13, 2007 12:36 PM

Feedback

# re: Visual Studio 2008 e i manifesti per Windows Vista 11/13/2007 4:18 PM Sergio Pappalardo
Mi permetto di correggerti su una cosa: non è esatto dire che il valore "asInvoker" richiede privilegi per utenti standard, ma più semplicemente avvia l'applicazione con gli stessi privilegi del chiamante. Ossia, se si fa doppio clic su un file eseguibile o un suo collegamento, verranno utilizzati i privilegi assegnati dalla shell di sistema (Windows Explorer per gli amici), che a sua volta utilizza i privilegi dell'utente corrente. Se questi è un utente standard, l'applicativo verrà quindi eseguito con privilegi da utente standard, se invece l'utente è appartenente al gruppo Administrators, l'applicativo verrà eseguito con privilegi di amministrazione. Tutto questo semplicemente utilizzando, lo ripeto, il parametro "asInvoker".
Consiglio questo mio post per completare la disamina di Alessandro: http://community.visual-basic.it/sergio/archive/2007/09/28/20580.aspx

# re: Visual Studio 2008 e i manifesti per Windows Vista 11/13/2007 4:23 PM Sergio Pappalardo
Ulteriore aggiunta (me ne ero dimenticato!).
Ho detto: "[...] se si fa doppio clic su un file eseguibile o un suo collegamento, verranno utilizzati i privilegi assegnati dalla shell di sistema (Windows Explorer per gli amici) [...]. In questo esempio la shell di sistema è il chiamante (l'invoker, in inglese), se però si avvia un sotto-task (chiamatelo anche figlio) da una nostra applicazione via codice, il sotto-task averà i permessi del chiamante, ossia la nostra applicazione madre, che fungerà da chiamante. Quindi se abbiamo avviato l'applicazione madre, ad esempio elevando i privilegi da "utente standard" ad "amministratore", anche il task figlio avrà privilegi amministrativi. Tutto questo, definendo nel file .manifest il valore "asInvoker" come parametro di "requestedExecutionLevel" per il file eseguibile del task figlio.
Tutto questo per dire che "asInvoker" non necessariamente avvia l'applicazione con privilegi di utente standard, ma dipende, appunto come spiegato, dai privilegi del chiamante, che vengono ereditati dal figlio.

Altra cosa di cui tenere in debita considerazione, è la virtualizzazione (file-system virtualization e registry-virtualization), che viene disabilitata da Vista quando il parametro requestedExecutionLevel viene impostato in uno qualsiasi dei 3 modi descritti nell'articolo di Alessandro (e nel mio).

# re: Visual Studio 2008 e i manifesti per Windows Vista 11/13/2007 4:35 PM Alessandro Del Sole
Grazie Sergio per la precisazione e per l'arricchimento della documentazione da consultare :-)

Alessandro

# re: Visual Studio 2008 e i manifesti per Windows Vista 11/13/2007 10:01 PM your name
In C# il risultato si ottiene aggiungendo al progetto un application manifest file

# re: Visual Studio 2008 e i manifesti per Windows Vista 12/5/2008 2:30 AM supa
Hi,

There is an issue with auto generating UAC manifest with Visual Studio 2008. IT hard codes the version and name as follows:

assemblyIdentity version="1.0.0.0" name="MyApplication.app"

This was reported to MS but the resolution was not clear:

http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=290160

What "setting on the project" update this version? If anyone know then please post it here.

Thanx,
-y2k_super_man@yahoo.com

# UAC &#8211; Le feature di sicurezza del kernel di Vista spiegate in maniera semplice &#8211; Episodio 1 &#8211; viklog 11/5/2009 1:24 PM Pingback/TrackBack
UAC &#8211; Le feature di sicurezza del kernel di Vista spiegate in maniera semplice &#8211; Episodio 1 &#8211; viklog

Post Feedback

Title:
Name:
Url:
Comments: 
Codice di sicurezza
Protected by FormShield