Можно ли изменить URL обновления на другое расположение установленного приложения ClickOnce? Если да, то как я могу это сделать?
Изменить URL-адрес обновления для приложения ClickOnce
- где вы хотите изменить URL-адрес обновления: со стороны клиента или со стороны сервера? 25.09.2012
- Кажется, это подробно описывает то, что вы хотите: noreferrer">social.msdn.microsoft.com/Forums/en-US/winformssetup/thread/ 25.09.2012
- @Cybermaxs-я хочу изменить со стороны клиента. Клиент уже установил приложение clickonce, и мне нужно изменить URL-адрес проверки обновлений. 27.09.2012
Ответы:
Вы упоминаете в своем комментарии, что хотите изменить его «на стороне клиента». Это невозможно. Ваше клиентское приложение должно иметь возможность проверять наличие обновлений в предыдущем местоположении, которое затем перенаправит его в новое место для немедленного следующего развертывания.
См. раздел , как переместить развертывание ClickOnce.
Можно ли с помощью трюка. Вы можете развернуть его в месте публикации по умолчанию. (приложение не должно проверять наличие обновлений). Затем скопируйте свое развертывание на сервер клиентов. Просто установите приложение на клиентские машины. Поле System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation.AbsoluteUri содержит расположение и приложение, из которого установлено приложение. Если вы это знаете, вы можете просто выполнить этот URL. Чтобы проверить, есть ли обновление, просмотрите файл .application на предмет версии.
это мой вспомогательный класс:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
namespace MatemanSC.Utility
{
public class ClickOnceUtil
{
Version _UpdateVersion = null;
public string UpdateLocation
{
get
{
return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation.AbsoluteUri;
}
}
public Version AvailableVersion
{
get
{
if (_UpdateVersion == null)
{
_UpdateVersion = new Version("0.0.0.0");
if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
using (XmlReader reader = XmlReader.Create(System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation.AbsoluteUri))
{
//Keep reading until there are no more FieldRef elements
while (reader.ReadToFollowing("assemblyIdentity"))
{
//Extract the value of the Name attribute
string versie = reader.GetAttribute("version");
_UpdateVersion = new Version(versie);
}
}
}
}
return _UpdateVersion;
}
}
public bool UpdateAvailable
{
get
{
return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion != AvailableVersion;
}
}
public string CurrentVersion
{
get
{
return System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString();
}
}
public void Update()
{
System.Diagnostics.Process.Start(System.Deployment.Application.ApplicationDeployment.CurrentDeployment.UpdateLocation.AbsoluteUri);
Environment.Exit(0);
}
public void CheckAndUpdate()
{
try
{
if (UpdateAvailable)
Update();
}
catch (Exception)
{
}
}
}
}
А вот как это использовать:
public partial class App : Application
{
public App()
{
ClickOnceUtil clickonceutil = new ClickOnceUtil();
clickonceutil.CheckAndUpdate();
}
}
Если вы хотите изменить URL-адрес, который вы будете использовать для обновления программ, вы можете просто использовать переписывание URL-адреса в web.config: старая программа будет указывать на старый URL-адрес, но она принесет новую программу с новым URL-адресом. .