2012-01-07 26 views
6

Bu bir ClickOnce uygulamasıdır. documentation'a göre, "Uygulamanız ilk olarak çalıştırıldığında başlangıçta komut satırı seçenekleri sağlanmışsa, Yeniden Başlat, uygulamayı yine aynı seçeneklerle başlatır.". Ama bunun ClickOnce uygulamalarıyla çalışıp çalışmadığını bilmiyorum. Eğer öyleyse, ne yapıyorum yanlış?Application.Restart bağımsız değişkenleri geri alamıyor geri

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(); 
} 
Ben .abc uzantılı başvurumu ilişkili

ve benim .abc dosyayı çift tıklayın, uygulama yalnızca argüman olarak dosya adıyla başlatacak, ama sonra ne zaman: Burada

benim kodudur Yeniden başlat ( button1'a basarak), GetCommandLineFile() boş bir dizi döndürecektir.

+0

Aynı sorunu yaşıyorum. Aynı argümanları kullanarak yeniden başlatmak için başvuruma ihtiyacım var. Sadece Application.Restart() yöntemini çağırmak kesinlikle aynı argümanları (* en azından ClickOnce kullanırken değil) iletir. Bunu yapmak için başka bir yol bulamıyorum. Restart() yöntemi, yeni argümanları iletmenize ve Process.Start çağrısı yapmanıza izin vermez çünkü bir güncelleme nedeniyle yeniden başlatılmışsanız, yürütülebilir yol değişecektir ve yolun yolunu bulmak için bulamıyorum. appref-ms – Nick

+0

Benim geçici çözüm, komut dizini argümanlarını bir dosyaya veri güncelleme dizinini güncellemeden/yeniden başlatmadan önce yazmaktır ve yeniden başlatma işleminden sonra hiçbir komut satırı argümanı geçmezse, argüman dosyasının mevcut olup olmadığını kontrol eder. eğer yaparsa, argümanları dosyadan yükler ve dosyayı siler. – Nick

+0

Evet, böyle bir şey yaptım. – Juan

cevap

3

Application.Restart'un, ClickOnce uygulamalarının nasıl işlediğinden ziyade standart komut satırı argümanları için tasarlandığına inanıyorum. Application.Restart için Microsoft'un kod baktığımızda

, bunlar uygulama ClickOnce uygulama olup olmadığını açıkça kontrol edip herhangi argümanlar geçirilen olmadan bunu yeniden başlatın. Başka bir uygulama, Environment.GetCommandLineArgs() çözümlenir ve yeni bir işleme gönderilir.

yerine bir dosyaya yazma argümanların, daha iyi bir çözüm düşünmek, sadece gibi yeni bir süreç başlatmak şudur: uygulama başladığında

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

Bu şekilde, GetCommandLineFile() tekrar argümanlar kapmak gerekir .

İlgili konular