Domanda

Abbiamo un'applicazione scritta sia in C ++ e .NET che consente di installare per tutti gli utenti nella cartella Programmi. Questa applicazione scarica nuove versioni di se stesso (come gli installatori MSI) e genera il nuovo processo di installazione per sostituire se stesso.

Il processo di installazione come esiste oggi:

  1. Copiare un installare app manager (C #, .NET 2.0) nella directory temporanea. Chiamare questo 'Manager'
  2. Manager viene eseguito con privs elevati per questo articolo .
  3. I chiusura dell'applicazione originale.
  4. Gestione genera il programma di installazione MSI (con privs elevate, dal momento che la copia è elevata)
  5. Gestione genera la nuova versione dell'app.

Il bug:

L'applicazione appena installato è in esecuzione in uno stato elevato. Questo fa sì che i problemi non voglio elencare qui.

Idealmente, il lancio della app appena installata verrebbe eseguito con i permessi dell'utente originale.

Non riesco a capire come abbassare l'app torna ad essere l'utente standard dopo l'elevazione.

Un trucco poco elegante:

(si, si, tutto questo processo è poco elegante in ogni caso)

  1. Copiare l'Install Manager nella directory temp
  2. Esegui il manager di installazione con privs utente standard. Consente di chiamare questo caso 'LowlyManager'.
  3. chiusura dell'applicazione originale.
  4. LowlyManager genera l'applicazione nuovo , questa volta con privs elevati. Diamo un nome questo caso 'UpperManagement'
  5. UpperManagement genera il programma di installazione
  6. UpperManagement esce con grazia, restituendo il codice di uscita del programma di installazione.
  7. LowlyManager interpreta il codice di errore da UpperManagement, e genera l'applicazione appena installata. Questa volta come l'invoker originale.

C'è un modo migliore per fare questo?

(ho lasciato fuori un mucchio di altri dettagli prima e dopo questi passaggi che rendono il processo più agevole per l'utente, ma questo dovrebbe essere sufficiente per capire il nucleo del problema che sto cercando di risolvere.)

Altri requisiti:

  • Non è possibile installare come applicazione per utente
  • L'utente non deve essere presentato con una finestra di dialogo di autenticazione se UAC avrebbe semplicemente chiesto "Sei sicuro di voler permettere questo?". Penso che questo potrebbe uccidere una soluzione che utilizza WindowsImpersonationContext, ma non sono sicuro.
  • Il sistema ha bisogno di lavorare su XP, Vista e Windows 7 (anche se c'è un processo separato per XP).
È stato utile?
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top