2010-04-09 1 views
9

Quali parti del framework richiedono che un utente sia più di un utente standard? Il motivo che mi chiedo è perché sto cercando di compilare una lista di possibili problemi con le nostre applicazioni esistenti durante la migrazione a Windows 7.Quali parti di .NET richiedono l'esecuzione di privilegi amministrativi?

Ora, mi viene in mente un paio di cose da me:

  • scrivendo a Eventlog
  • scrittura alle chiavi di registro al di fuori del campo di applicazione CURRENT_USER
  • Ottenere un ambiente variabile
  • ecc ...

Vorrei davvero un elenco più completo e finora non ho trovato una risorsa decente in cui tutte le cose sono elencate.

Nota che non sto cercando modi per elevare i privilegi per le app esistenti (cosa che si può fare usando un manifest), sto semplicemente identificando azioni nel codice che potrebbero causare problemi.

+4

a parte, ovviamente queste limitazioni non sono specifiche per .Net –

+2

nessuno degli esempi specificati richiede necessariamente i privilegi di amministratore. Le applicazioni possono aggiungere il proprio registro al sistema del registro eventi e specificare un livello di privilegio più basso. ottenere una variabile di ambiente è un'operazione per utente. scrivere sulle chiavi di registro al di fuori dell'HKCU dipende dall'ACL del registro; le applicazioni possono certamente creare chiavi HKLM scrivibili da qualsiasi utente. –

+1

Sembra molto difficile ottenere un elenco completo di chiamate API che potrebbero causare problemi. Dovrò concentrarmi su altri mezzi per determinare se una domanda fallirebbe. Il modo in cui ora sembra, sembra che Daniel Rose abbia offerto il miglior contributo per risolvere il mio problema, ma non è davvero la risposta alla mia domanda. Dal momento che Markus ha sottolineato che la lista è fondamentalmente la stessa dei requisiti del logo NT, gli concederò la taglia. Grazie a tutti per il vostro contributo. –

risposta

8

Bene, i tuoi esempi non hanno davvero nulla a che fare con Windows 7 o .NET. In realtà erano già parte dei requisiti del logo "Progettato per Windows NT 4.0". Se hai scritto la tua applicazione in modo che gli utenti non amministratori fossero in grado di eseguirla su NT, Win2k o XP, funzionerà perfettamente su Vista/Win7.

C'è un altro errore comune quando si esegue il software su sistemi x64 (tuttavia anche questo non è specifico per Win7 ma è vero ad esempio per Win2003 Server x64 o Win XP x64): Se si sta lavorando con 32 nativi -bit codice, come le chiamate a una DLL nativa o l'interoperabilità COM con un componente in-process), assicurati di selezionare "x86" come destinazione della piattaforma nelle impostazioni del progetto di Visual Studio invece di "Qualsiasi CPU". In caso contrario, l'applicazione verrà eseguita come processo a 64 bit e non è possibile combinare codice a 32 e 64 bit nello stesso processo, in modo che si verifichino errori.

E ovviamente, come sempre è stata la migliore prassi, utilizzare Environment.GetSpecialFolders anziché percorsi codificati.

+2

come risponde alla domanda? – Alex

+0

@Alex - "Beh, i tuoi esempi non hanno davvero nulla a che fare con Windows 7 o .NET". Non esistono parti di framework .Net che richiedono privilegi amministrativi. Esistono classi di framework che racchiudono le funzionalità del sistema operativo che potrebbero richiedere privilegi di amministratore. Tuttavia, non esiste un modo semplice per dire se un particolare metodo .Net arriverà a tale caratteristica. –

2

Un posto per ottenere un elenco parziale è cercare in "Editor Criteri di gruppo locali" in cui è possibile controllare quali diritti di accesso e privilegi vengono assegnati agli amministratori solo per impostazione predefinita.

+0

Questo è un approccio interessante. Poiché Corp.IT ha la tendenza ad abusare delle politiche sul sito del mio cliente, ciò potrebbe portare anche a buoni risultati. –

8

Pensare a "Quella che chiama la biblioteca" ti porterà sulla strada sbagliata. Pensa a tutto ciò che scrive su un file. Se quel file è in Program Files (tra gli altri posti), hai bisogno di admin privs. Se è sotto AppData, non lo fai. Stessa chiamata alla biblioteca, risultati diversi. Idem per scrivere nel registro: HKLM è necessario l'admin, HKCU non lo hai. Scrivere sul registro eventi è generalmente ok ma la creazione della fonte dell'evento non lo è. E così via. Non si tratta di quale metodo si chiama, si tratta più dei parametri (ad esempio il percorso) che si passa ad esso.

2

I pipe denominati possono causare problemi. Normalmente questo non è un problema, ma l'uso di Named Pipes sta ora aumentando con WCF che li supporta in modo nativo per il trasporto IPC.

+0

Grazie. Lo aggiungerò anche alla mia lista. –

3

Non credo che le variabili ambientali debbano essere necessarie per elevare i privilegi. Almeno non ci sono mai riuscito, ci sono davvero casi in cui ciò è vero?

+0

Forse hai ragione. Il mio approccio è stato quello di compilare prima un elenco di possibili punti di dolore e quindi determinare per ognuno di essi se mi trovo nei guai. –

2

Nulla nel framework .Net richiede privilegi amministrativi. Tutto ciò che ha a che fare con la sicurezza a livello di utente è controllato dal sistema operativo e se i privilegi di amministratore sono necessari dipende dalla configurazione del sistema operativo. Pertanto, il framework non può stabilire se è necessario richiedere l'elevazione.

Si dovrebbe pensare non in termini di "Cosa nella struttura .Net richiede elevazione?", Ma in termini di "Quali funzioni del sistema operativo è l'utilizzo della mia app che richiedono l'elevazione dell'amministratore nella configurazione predefinita". E come detto da @Marcus, i requisiti del logo "Progettato per Windows NT 4.0" rappresentano un ottimo punto di partenza per determinare quali funzioni del sistema operativo la tua app dovrebbe evitare se è progettata per essere eseguita come utente normale.

+0

Punto preso. Il fatto è che, se riesco a ridurlo a una serie di librerie, sarà possibile scansionare (tutti) i codebase sull'occorrenza di uno di questi, il che potrebbe rapidamente indicare possibili problemi. –

+0

Capisco cosa si vuole raggiungere, ma sarà difficile scansionare e contrassegnare automaticamente tali chiamate. Principalmente perché l'elevazione dell'amministratore spesso viene attivata non dalla chiamata al metodo stessa, ma dai parametri passati a quella chiamata di metodo. –

+0

L'elevazione amministrativa non viene attivata dalle chiamate di metodo. Quello che potrebbe essere innescato è "fallire se non si è elevati". Quelli sono diversi –

1

È possibile utilizzare i controlli Luapriv dallo Application Verifier per trovare i problemi. Anche lo Standard User Analyzer ti aiuterà.

+0

Queste sono grandi risorse. Mi aiuteranno sicuramente molto a fare il mio lavoro. Grazie! –

+0

In realtà, questi strumenti fanno parte di Application Compatibility Toolkit: http://www.microsoft.com/downloads/details.aspx?FamilyId=24DA89E9-B581-47B0-B45E-492DD6DA2971&displaylang=en –

1

Se ho la comprensione la sua domanda, Visual Studio può calcolare questo per voi ...

Basta andare alle proprietà del vostro progetto, fare clic sulla scheda Protezione e controllo "Attiva Impostazioni ClickOnce sicurezza" casella di controllo. Selezionare il pulsante di opzione "Questa è un'applicazione di attendibilità parziale" e quindi fare clic sul pulsante "Calcola autorizzazioni".

VS sarà posto un segno di spunta accanto ad ogni autorizzazione come IO, Registro di sistema, ecc ... l'applicazione richiede

+0

Wow. Sembra un buon approccio. –

0

Dubito seriamente che c'è un modo per ottenere un elenco completo delle chiamate .NET che richiedono l'elevazione dei privilegi .

La scrittura BTW nel registro eventi non richiede l'elevazione, tuttavia la creazione di una sorgente del registro eventi richiede elevazione.

Il modo migliore per scoprire quali parti del codice hanno problemi è testare su Win7 e vedere quali interruzioni, non eleganti, ma il lavoro. Se stai cercando di creare delle stime di tempo per questa attività, potresti dover passare un giorno o due attraverso la tua app: eseguire su Win7, vedere quali interruzioni, prenderne nota, commentare/evitare/disabilitare quella sezione, e ripetere finché non pensi di avere abbastanza di una lista di cose da affrontare.

+0

Se fosse solo una singola app che sto verificando, sono d'accordo sul fatto che il tuo approccio sarebbe buono. Tuttavia, stiamo parlando di oltre 250 applicazioni purtroppo. E voglio evitare di doverli eseguire tutti uno per uno. –

+0

Quindi vuoi totalmente l'analizzatore LUA (o utente standard), controllerà l'esecuzione dell'applicazione e ti dirà cosa sta facendo. Prendi il toolkit dai link nell'altra risposta di sicuro. –