2012-01-07 10 views
6

Questa è un'applicazione ClickOnce. In base allo documentation, "Se l'applicazione è stata originariamente fornita con le opzioni della riga di comando quando è stata eseguita per la prima volta, il riavvio riavvierà l'applicazione con le stesse opzioni". Ma non so se questo dovrebbe funzionare o no con le applicazioni ClickOnce. In tal caso, cosa sto sbagliando?Application.Restart non passa argomenti indietro

Ecco il mio codice:

public Form1() 
{ 
    InitializeComponent();   
    textBox1.Text = string.Join(Environment.NewLine, GetCommandLineFile()); 
} 

private static string[] GetCommandLineFile() 
{ 
    if (AppDomain.CurrentDomain != null && 
     AppDomain.CurrentDomain.SetupInformation != null && 
     AppDomain.CurrentDomain.SetupInformation.ActivationArguments != null && 
     AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData != null && 
     AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData.Any()) 
    { 
     return AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData; 
    } 
    else return new string[] { }; 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    Application.Restart(); 
} 

ho associato la mia domanda con l'estensione .abc e quando faccio doppio clic il mio file .abc, l'applicazione lancerà con il nome del file come unico argomento, ma poi quando ho riavviare (premendo il mio button1), GetCommandLineFile() restituirà un array vuoto.

+0

Ho lo stesso problema. Ho bisogno che la mia applicazione si riavvii usando gli stessi argomenti. Basta chiamare Application.Restart() sicuramente * non * passa gli stessi argomenti (almeno non quando si usa ClickOnce). Non riesco a trovare nessun altro modo per fare questo neanche. Il metodo Restart() non ti permette di passare nuovi argomenti e chiamare Process.Start non va bene perché se sei riavviato a causa di un aggiornamento il percorso dell'eseguibile cambia, e non riesco a trovare comunque il percorso del file. appref-ms – Nick

+0

La mia soluzione è scrivere gli argomenti della riga di comando su un file nella directory dei dati prima di aggiornare/riavviare e se nessun argomento della riga di comando viene visualizzato dopo il riavvio controlla se il file degli argomenti esiste. se lo fa carica gli argomenti dal file ed elimina il file. – Nick

+0

Sì, ho finito per fare qualcosa del genere. – Juan

risposta

3

Credo che Application.Restart sia stato progettato per gli argomenti della riga di comando standard invece di come le applicazioni ClickOnce lo gestiscono.

Guardando il codice Microsoft per Application.Restart, essi verificano esplicitamente se l'applicazione è un'applicazione ClickOnce e quindi la riavvia senza qualsiasi argomento venga passato. Qualsiasi altra applicazione, ottiene Environment.GetCommandLineArgs() analizzata e inviata a un nuovo processo.

Penso che una soluzione migliore, invece di scrivere argomenti in un file, è quello di iniziare semplicemente un nuovo processo in quanto tale:

"path\Application Name.appref-ms" arg1,arg2,arg3 

In questo modo, quando l'applicazione si avvia, GetCommandLineFile() dovrebbe afferrare di nuovo gli argomenti .

Problemi correlati