我在ClickOnce应用程序中遇到问题,当我打电话CheckForUpdate()
一段时间后,我的重新启动系统完美工作。大约一小时后,它开始崩溃。我在一个单独的线程上运行它,并且ClickOnce应用程序在我们的本地网络上。ClickOnce CheckForUpdate()在一段时间后返回NULL
错误代码:
System.Deployment.Application.DeploymentException:此部署的应用程序已经被安装了不同的应用程序标识。在System.Deployment.Application.SubscriptionStore.CheckAndReferenceApplication(SubscriptionState子状态中,DefinitionAppId APPID,Int64类型的transactionId) 在System.Deployment.Application.DeploymentManager.BindCore(布尔阻挡,临时文件& tempDeploy,TempDirectory & tempAppDir,的FileStream & refTransaction,字符串& PRODUCTNAME ) 在System.Deployment.Application.DeploymentManager.Bind() 在System.Deployment.Application.ApplicationDeployment.CheckForDetailedUpdate(布尔persistUpdateCheckResult) 在System.Deployment.Application.ApplicationDeployment.CheckForUpdate()
这里是方法:
private void RestartUpdate()
{
bool running = true;
while (running)
{
Thread.Sleep(5000);
try
{
if (!RESTARTING)
{
if (ApplicationDeployment.IsNetworkDeployed)
{
ApplicationDeployment updateCheck = ApplicationDeployment.CurrentDeployment;
bool newUpdate = updateCheck.CheckForUpdate(); **<---- Problem**
if (newUpdate == true)
{
RESTARTING = true;
updateCheck.UpdateCompleted +=
new AsyncCompletedEventHandler(
Deployment_UpdateCompleted);
updateCheck.UpdateAsync();
}
}
}
}
catch (Exception e)
{
SendErrorMessageToServer(e.ToString());
}
}
}
你有任何线索,为什么发生这种情况?
编辑:
检查更新时发现,从詹姆斯万里谁似乎完全绕过点击一次部署API答案:
//Used to use the Clickonce API but we've uncovered a pretty serious bug which results in a COMException and the loss of ability
//to check for updates. So until this is fixed, we're resorting to a very lo-fi way of checking for an update.
var manifestFile = new WebClient().DownloadString(updateLocation);
var xdoc = XDocument.Parse(manifestFile);
XNamespace nsSys = "urn:schemas-microsoft-com:asm.v1";
var version = new Version(xdoc.Descendants(nsSys + "assemblyIdentity").First().Attribute("version").Value);
更新应用程序后是否开始崩溃?如果是这样,您必须在'AssemblyInfo'中更改应用程序版本号 – VMAtm