Domanda

Come possiamo richiedere il riavvio del computer dopo l'installazione da un'azione personalizzata C#?

Stiamo utilizzando il progetto di installazione di VS 2005 per la nostra installazione e dobbiamo decidere a livello di programmazione di richiedere un riavvio (quindi non accadrà ad ogni installazione, solo ad alcune).

AGGIORNAMENTO:Cerchiamo innanzitutto qualcosa che sia già integrato nel sistema di azioni personalizzate MSI.Se ciò non esiste, possiamo ricorrere in qualche modo al riavvio del PC da soli, ma vorremmo evitarlo.

AGGIORNAMENTO:Vediamo dove puoi impostare REBOOT=Force quando modifichi l'Msi in Orca, puoi modificare queste tabelle da un'azione personalizzata C# in fase di runtime?Potremmo impostarlo per riavviarsi ogni volta, ma ciò potrebbe rendere fastidiosa la nostra configurazione (dovrà riavviarsi solo in rare occasioni).

AGGIORNAMENTO:Abbiamo provato a impostare:

savedState["REBOOT"] = "Force";

Dall'interno del metodo Install() della nostra azione personalizzata, ma senza fortuna.Non sembra che IDictionary, saveState faccia davvero qualsiasi cosa.

Provato anche:

Context.Parameters["REBOOT"] = "Force";

Ma penso che questa raccolta contenga solo gli argomenti della riga di comando passati all'azione personalizzata.

AGGIORNAMENTO:C'è un modo per modificare il nostro MSI con Orca per far funzionare questo trucco?Forse pianificare un riavvio in base alla condizione di alcuni file esistenti?Non abbiamo trovato come impostare le proprietà MSI da un'azione personalizzata C#.

AGGIORNAMENTO:Abbiamo provato ad collegarci ad AppDomain.ProcessExit e AppDomain.DomainUnload e ad avviare un nuovo thread e chiamare Process.GetCurrentProcess().WaitForExit() e nessuno di questi eventi verrà attivato dall'interno di un'azione personalizzata C#...

È stato utile?

Soluzione 2

A quanto pare, l'unico modo per risolvere questo problema è:

A) Modificare l'MSI con orca per riavviare la configurazione ad ogni installazione

B) Rifare il progetto di installazione con WiX o Install Shield

Grazie per l'aiuto ragazzi.

Altri suggerimenti

È necessario aggiungere o chiamare il MSI azione personalizzata ScheduleReboot http://msdn.microsoft.com/en-us/library/aa371527 (VS.85) aspx nel vostro InstallExecuteSequence,. È possibile farlo utilizzando la funzione MsiDoAction MSI, http: //msdn.microsoft.com/en-us/library/aa370090(VS.85).aspx all'interno un'azione personalizzata. Si prega di notare che l'azione personalizzata che gli orari di questo deve essere un'azione personalizzata immediata, non è un'azione personalizzata differita. Questo significa che sarà probabilmente bisogno di programmare dopo InstallFinalize. Si potrebbe anche aggiungere alla InstallExecuteSequence con una condizione su una proprietà pubblica che l'azione personalizzata imposta.

Quando ho avuto a che fare questo prima abbiamo utilizzato una funzione API Win32 da user32.dll, penso che questo è stato: ExitWindowsEx ()

LanceSc vi ha dato la risposta. È necessario eseguire ScheduleReboot, e il modo migliore per farlo è quello di inserirlo nel InstallExecuteSequence condizionata dalla vostra proprietà personalizzata proprio che si imposta all'interno della vostra azione personalizzata.

Come si parla, Wix è la strada da percorrere per il futuro la flessibilità. Wix ora include anche DTF (strumenti di distribuzione Foundation), che è un ricco set di librerie di classi .NET che avvolgono l'intera API di Windows. È possibile utilizzare questo per accedere facilmente i database MSI da C # o di scrivere C # azioni personalizzate. Posso fornire più informazioni, se desiderabile.

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