2012-01-10 20 views
7

Şu anda çalışan ClickOnce uygulamasının yayımcı adını (Visual Studio'da Project Properties -> Publish -> Options -> Publisher name'da ayarladığınız) okumak mümkün mü?Geçerli ClickOnce'un uygulama yayıncı adını al?

Neden ihtiyacımın nedeni, şu anda çalışan uygulamanın başka bir örneğini this makalesinde açıklandığı gibi çalıştırmak ve parametrelere iletmektir.

Tabii ki Uygulamamın yayıncı adını biliyorum, ancak kod yazmam gerekirse ve daha sonra yayıncı adımı değiştirmeye karar verdiğimde büyük olasılıkla bu kod parçasını güncelleştirmeyi unutacağım.

+0

(bir web sunucusuna dağıtmak gerekir). Http://stackoverflow.com/questions/7588608/clickonce-application-wont-accept-command-line-arguments/7588781#7588781 – Reddog

+0

'a göre, bunun benim durumum için geçerli olup olmadığından emin değilim. Bu bir sunucudan yükler, ancak bildiğim kadarıyla bir sunucudan "çalışmaz". Yükledikten sonra da çevrimdışı çalıştırabilirsiniz. Bu URL’yi "Process.Start" 'a geçirmeniz gerekiyor mu? – Juan

cevap

1

Bunun önemsiz olduğunu düşünürsünüz, ancak çerçevede bu bilgiyi veren hiçbir şey göremiyorum.

Bir kesmek istiyorsanız, yayıncıyı kayıt defterinden alabilirsiniz.

Yasal Uyarı - Kod çirkin ve denenmemiş bir ...

... 
    var publisher = GetPublisher("My App Name"); 
    ... 

    public static string GetPublisher(string application) 
    { 
     using (var key = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\CurrentVersion\Uninstall")) 
     { 
      var appKey = key.GetSubKeyNames().FirstOrDefault(x => GetValue(key, x, "DisplayName") == application); 
      if (appKey == null) { return null; } 
      return GetValue(key, appKey, "Publisher"); 
     } 
    } 

    private static string GetValue(RegistryKey key, string app, string value) 
    { 
     using (var subKey = key.OpenSubKey(app)) 
     { 
      if (!subKey.GetValueNames().Contains(value)) { return null; } 
      return subKey.GetValue(value).ToString(); 
     } 
    } 

Eğer daha iyi bir çözüm bulursanız, takip edin. tıpkı bu dışarı atma,

public string AssemblyCompany 
    { 
     get 
     { 
      object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); 
      if (attributes.Length == 0) 
      { 
       return ""; 
      } 
      return ((AssemblyCompanyAttribute)attributes[0]).Company; 
     } 
    } 

Ne yazık ki, "yayıncı" özel niteliği gidecekseniz:

0

ClickOnce hakkında bilmiyorum, ama normalde, System.Reflection çerçevesini kullanarak montaj-bilgi okuyabilir olası bir çalışma çevresinde

4

İşte başka bir seçenek. İhtiyacım olan tek şey şu anda çalışan uygulamanın yayıncı adını alacaktır.

XML'i ayrıştırmanın en güvenli yolunun bu olduğundan emin değilim. Ben senin ortamında sorgu dizesi parametreleri yerine mümkünse ile aktivasyon URL kullanmayı deneyin kullanırsınız ClickOnce app diğer örneğini başlatma açısından

public static string GetPublisher() 
{ 
    XDocument xDocument; 
    using (MemoryStream memoryStream = new MemoryStream(AppDomain.CurrentDomain.ActivationContext.DeploymentManifestBytes)) 
    using (XmlTextReader xmlTextReader = new XmlTextReader(memoryStream)) 
    { 
     xDocument = XDocument.Load(xmlTextReader); 
    } 
    var description = xDocument.Root.Elements().Where(e => e.Name.LocalName == "description").First(); 
    var publisher = description.Attributes().Where(a => a.Name.LocalName == "publisher").First(); 
    return publisher.Value; 
} 
İlgili konular