2012-09-21 21 views
8

Sto usando Wix 3.6. Ho un problema, mentre disinstalla se una finestra è aperta e mostrata nella barra delle applicazioni (questa finestra è una parte del mio file msi, che sto cercando di disinstallare), mostra una finestra di dialogo che chiede all'utente di chiudere l'applicazione (" La seguente applicazione dovrebbe essere chiusa prima di continuare l'installazione ").ChiudiApplicazione durante la disinstallazione - wix

Ho provato quanto segue, ma senza fortuna.

<InstallExecuteSequence> 
     <Custom Action="WixCloseApplications" 
       Before="InstallInitialize">Installed</Custom> 
     <Custom Action="StartMonitor" 
       After="StartServices">NOT Installed</Custom> 
    </InstallExecuteSequence> 

    <util:CloseApplication Id="CloseMonitor" Target="Monitor.exe" 
          CloseMessage="yes" RebootPrompt="no"> 
     Installed 
    </util:CloseApplication> 

Voglio che il wix rilevi le applicazioni e le chiuda come parte del processo di disinstallazione. Non è necessario mostrare il prompt della finestra di dialogo. Qualcuno può aiutarmi a realizzarlo.

Funziona correttamente con l'installazione dal prompt dei comandi con l'opzione/qn ma senza l'opzione/qn viene visualizzata la finestra di dialogo ("La seguente applicazione deve essere chiusa prima di continuare l'installazione"). Qualcuno può aiutarmi su come risolvere questo problema.

+2

ho cambiato InstallInitialize per InstallValidate e ha funzionato bene Installato –

risposta

1

Aggiungi un evento personalizzato C# e aggiungere renderlo primo evento InstallUISequence e l'uso seguente codice per uccidere il processo:

try 
{ 
     Process proc = Process.GetProcessesByName("MyApplication"); 
     proc.Kill(); 
} 
catch (Exception ex) 
{ 
     MessageBox.Show(ex.Message.ToString()); 
} 

e se il supporto del ur applicazione più istanze poi contare il no. di istanze prima:

int count = 0; 
Process[] process = Process.GetProcessesByName("MyApplication"); 
foreach (Process pr in process) 
{ 
    if (pr.MainModule.FileName.Equals(Assembly.GetExecutingAssembly().Location,    StringComparison.OrdinalIgnoreCase)) 
    { 
     count++; 

    } 
} 

E se non si sta affatto utilizzando e DllEntry poi seguite questo link

+0

Ciao Grazie per il suggerimento, –

+0

Mi è stato chiesto di non usare C#, quindi non ho provato il tuo suggerimento. –

+0

vedi wix ha un'azione o una funzione incorporate molto meno quindi devi usare un codice esterno. potrebbe essere C# o qualsiasi altra lingua. –

Problemi correlati