2011-05-07 15 views

答えて

2

答えはClickOnce Run at Startupで見つけることができます。基本的には、InPlaceHostingManagerを使用してClickOnceマニフェストを取得し、それを読み取ります。これは非同期メソッドであると私には不具合がありますが、これがこれまでに働いていた唯一の方法です。簡略化は非常に高く評価されています。 DeploymentDescriptionの説明については、Webページを参照してください。

var inPlaceHostingManager = new InPlaceHostingManager(ApplicationDeployment.CurrentDeployment.UpdateLocation, false); 
inPlaceHostingManager.GetManifestCompleted += ((sender, e) => 
{ 
    try 
    { 
     var deploymentDescription = new DeploymentDescription(e.DeploymentManifest); 
     string productName = deploymentDescription.Product; 
     ***DoSomethingToYour(productName);*** 

     // - use this later - 
     //var commandBuilder = new StartMenuCommandBuilder(deploymentDescription); 
     //string startMenuCommand = commandBuilder.Command; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message + Environment.NewLine + ex.StackTrace); 
    } 
}); 
+1

'InPlaceHostingManager'は' System.Deployment.dll'にあります。 'DeploymentDescription'はどこにありますか? –

+0

@DaviFiamenghiあなたが探しているクラスはリンク先のコメントにコメントしています。私はそれを含む答えを編集し、レビューを待っている。リンクをたどってクラスのページを検索すると、それを見つけることができます。 – workabyte

2

ApplicationDeployment.UpdatedApplicationFullNameプロパティ

+1

これは正解ではありません。私は、Clickonce Publishオプションに入力されているProductNameを探しています。私はマニフェストを使用するソリューションを見つけましたが、それは最もエレガントではありません。 – tofutim

3

Microsoft.Build.Tasks.v4.0.dllへの参照を追加し、その後、この実行します。

if (null != AppDomain.CurrentDomain.ActivationContext) 
{ 
    DeployManifest manifest; 
    using (MemoryStream stream = new MemoryStream(AppDomain.CurrentDomain.ActivationContext.DeploymentManifestBytes)) 
    { 
     manifest = (DeployManifest)ManifestReader.ReadManifest("Deployment", stream, true); 
    } 
    // manifest.Product has the name you want 
} 
else 
{ 
    // not deployed 
} 

をDeployManifestも、出版社やSUPPORTURLのようなあなたのマニフェストから他の有用な情報を提供することができます。

+0

これが機能するためのバージョン要件(あれば、.NET FrameworkやVisual Studioなど)は何ですか? –

関連する問題