2010-11-20 8 views
4

Benim uygulamam sadece ben ve iş arkadaşlarım içindir, bu yüzden Click-Once veya copy-the-exe olup olmadığına aldırmam. Windows Gezgini'nde verilen uzantıya sahip bir dosyayı tıklatıp programımın başlatılmasını ve dosyayı açmasını istiyorum. Dosya adını yakalamak için alamıyorum.WPF; bir kere tıkla; Başlatmak için Çift Tıklama Dosyası; VS 2008

göstermelik çözüm:

http://blogs.msdn.com/b/avip/archive/2008/10/27/wpf-supporting-command-line-arguments-and-file-extensions.aspx

deniyorum kod aşağıda ve bu noktada ben yapmaya çalışıyorum hepsi bir metin kutusuna tıklandığında dosyanın adını konur. İlgili bilgisizliğimin, bir kez tıklatma uygulamasının windows explorer'dan nasıl referans gösterileceğinden şüpheleniyorum. İnşa ettiğimde, setup.exe adında bir dosyaya, Wis.application adlı bir dosyaya son veriyorum ve kurmak için "setup" a tıkladığımda, "Click-once uygulama referansı" türünde bir kısayolla bitiriyorum. C: \ Kullanıcılar \ ptom \ AppData \ Roaming \ Microsoft \ Windows \ Başlat Menüsü \ Programlar \ Wis ". Yüklemeyle oluşturulmuş kısayolu ve dosyalarınızı setup.exe ile ilişkilendirerek ilişkilendirmeyi denedim. Dosyaya tıkladığımda, uygulama başlatılır ancak AppDomain.CurrentDomain.SetupInformation.ActivationArguments öğesinin null olduğunu gösterir. ("İşaretler" ifadesiyle, metin kutusunun, boş olup olmadığını görmek için test ettiğim metinle doldurulduğunu kastediyorum). Uygulamayı hata ayıklamadan çalıştırırsam veya yalnızca başlangıç ​​menüsünden çalıştırarak, ActivationArguments öğesinin null olmadığını belirten kod yolunu izleyerek neyi beklediğimi yapar, ancak ActivationData (string []) uzunluğudır İşte

0.

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Windows; 

namespace Wis 
{ 
    /// <summary> 
    /// Interaction logic for App.xaml 
    /// </summary> 
    public partial class App : Application 
    { 
     protected override void OnStartup(StartupEventArgs e) 
     { 

      // Check if this was launched by double-clicking a doc. If so, use that as the 

      // startup file name. 
      if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments == null) 
      { 
       this.Properties["DoubleClickedFileToLoad"] = "There were no activation arguments AGAIN"; 
      } 
      else 
      { 
       if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData != null 
            && AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData.Length > 0) 
       { 
        this.Properties["DoubleClickedFileToLoad"] = 
        AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0]; 
       } 
       else 
       { 
        this.Properties["DoubleClickedFileToLoad"] = "Type in a file name"; 
       } 
      } 


     } 
    } 
} 

Teşekkür

cevap

3

İlk ClickOnce-yayımlamak için dosya assoc eklemek gerekir (Projesi-> Properties- Seç> Yayınla-Seçenekler-> Dosya Dernekler)
Sonra başvurusu ekleme
Sonra yaparsın (ClickOnce veya Yerel)

protected override void OnStartup(System.Windows.StartupEventArgs e) 
    { 
     var path = GetPath (e); 
    }   

    private static string GetPath(StartupEventArgs e) 
    { 
     if (!ApplicationDeployment.IsNetworkDeployed) 
      return e.Args.Length != 0 ? e.Args[0] : null; 
     if (AppDomain.CurrentDomain.SetupInformation.ActivationArguments == null) 
      return null; 
     var args = AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData; 
     return args == null || args.Length == 0 ? null : new Uri(args[0]).LocalPath; 
    } 
+0

Kodunuza yapıştırdım; ApplicationDeployment adlı bir nesneniz vardı; İlk önce bunu kestim ve işe yaradı. İlk testi kullanmak için System.Deployment'a bir başvuru eklemem gerekiyordu. –

3

Eğer Environment.GetCommandLineArgs() kontrol ettiniz app.xaml.cs gelen kodudur? Bu, uygulamanızın başlatıldığı argümanları gösterir.

Uygulamanız bir dosyayla ilişkiliyse, dosya adını argümanlardan biri olarak içermelidir. için "System.Deployment" Her şeyden

+0

ben böyle basit çözümler işe yaramaz birkaç yerlerde okumuştu ama şimdi sadece denedim ve başlangıçta türüne bağlı olarak bu şekilde App.cs yolu ayıklamak çalışıyor. Yani bununla ne yapacağımı bilmiyorum. Bir kez tıklattığımda kısayolum .../windows/Başlat Menüsü/Programlar/Pwis klasöründe bir uzantı ile yeterince emin, 2. argümanı ile ilgili uzantıyı içeren bir klasöre tıkladığımda dosya. Öyleyse bu en küçük cevaptan daha basit bir yoldur, diğer cevap daha fazla senaryoyu kapsıyor mu? –

İlgili konular