Domanda

Ho un CustomAction come parte di un MSI.

DEVE essere eseguito come account di dominio che è anche membro dell'account Administrators locale.

Non può usare il flag NoImpersonate per eseguire l'azione personalizzata come NT Authority \ System in quanto non otterrà quindi l'accesso alle risorse di rete.

Su Vista / 2008 con UAC abilitato se NoImpersonate è disattivato, verrà eseguito come utente in esecuzione ma con il token non privilegiato e non otterrà l'accesso a risorse locali come .installState. Vedi UAC Architecture

Chiunque conosce un modo per entrambi

  • Forza l'esecuzione dell'MSI con il token elevato allo stesso modo dell'esecuzione da un prompt dei comandi con privilegi elevati?

  • Forza l'esecuzione di CustomAction in modo elevato (richiede che Administrator in manifest non funzioni)?

  • Risolvi se UAC è abilitato e se non è stato eseguito in modo elevato e in tal caso avvisare o annullare l'installazione?

È stato utile?

Soluzione

Rispondere alla mia domanda per qualsiasi altro povero s0d che guarda questo.

  • Non puoi aggiungere un manifest a un MSI. È possibile aggiungere un SETUP.EXE o un bootstrapper per eseguire la shell dell'MSI e manifestarlo con requestAdministrator ma ciò elimina alcuni dei punti dell'utilizzo di un MSI.

  • L'aggiunta di un manifest a una CustomAction non funziona poiché viene eseguita da msiexec.exe

Il modo in cui ho affrontato questo problema è impostare MSIUSEREALADMINDETECTION su 1, quindi la condizione Privileged funziona effettivamente e aggiunge una Condizione di avvio per Privilegiato che fornisce un messaggio di errore sull'esecuzione tramite un prompt dei comandi con privilegi elevati e quindi chiude l'installazione.

Questo ha il felice effetto collaterale: quando un msi viene eseguito da un prompt dei comandi elevato, le CustomActions posticipate vengono eseguite come l'utente corrente con un token Amministratore completo (anziché un token utente standard) indipendentemente da impostazione NoImpersonate .

Ulteriori dettagli - http: // www.microsoft.com/downloads/details.aspx?FamilyID=2cd92e43-6cda-478a-9e3b-4f831e899433

[Modifica] - Ho inserito qui lo script che ti consente di aggiungere la proprietà MSIUSEREALADMINDETECTION poiché VS non ha la capacità di farlo e Orca è un dolore.

Altri suggerimenti

requestAdministrator nel manifest dovrebbe funzionare.

Puoi anche utilizzare un file .exe del bootloader che può utilizzare ShellExecute con " RUNAS " come verbo (puoi usare 7-zip per creare il bootloader, o ci sono molti altri modi).

Puoi creare un semplice file di archivio sfx per il file msi con Winrar e queste opzioni:

  • Scheda Configurazione > Esegui dopo l'esecuzione input : il nome del tuo file msi

  • Scheda Avanzate > Seleziona la casella di controllo Richiedi accesso amministrativo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top