【发布时间】:2011-05-07 01:35:01
【问题描述】:
我有一个不同于程序集名称的 ClickOnce 发布名称。出于讨论目的,它是“App 6.0”。我在我的项目的属性中设置它。有没有办法从程序内部获取这个值?
【问题讨论】:
标签: c# installation clickonce
我有一个不同于程序集名称的 ClickOnce 发布名称。出于讨论目的,它是“App 6.0”。我在我的项目的属性中设置它。有没有办法从程序内部获取这个值?
【问题讨论】:
标签: c# installation clickonce
添加对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 还可以提供清单中的其他有用信息,例如 Publisher 或 SupportUrl。
【讨论】:
答案可以在ClickOnce Run at Startup中找到。本质上,您使用 InPlaceHostingManager 获取 ClickOnce 清单并阅读它。它让我觉得它是一种异步方法,但这是迄今为止唯一有效的方法。非常感谢简化。有关 DeploymentDescription 的说明,请参见网页。
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);
}
});
【讨论】:
InPlaceHostingManager 位于System.Deployment.dll。 DeploymentDescription 在哪里?
ApplicationDeployment.UpdatedApplicationFullName 属性
【讨论】: