У меня проблема с приложением 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 (булевой блокировки, TempFile & tempDeploy, TempDirectory & tempAppDir, FileStream & refTransaction, Строка & Productname) на System.Deployment.Application.DeploymentManager.Bind() в System.Deployment.Application.ApplicationDeployment.CheckForDetailedUpdate (Boolean) 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());
}
}
}
Есть ли у вас какие-либо понятия, почему это происходит?
EDIT:
Обнаружили ответ от Джеймса Майлса, который, кажется, чтобы обойти щелчок однократное развертывания 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