我有一个使用ClickOnce部署的WPF应用程序(该应用程序部署到所有客户端都可以访问的网络驱动器),我在应用程序中有一个计时器,每10分钟触发一次并检查更新,并自动安装如果有的话。我的更新课程如下:
public class AppUpdater
{
public bool CheckForUpdates()
{
ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
return ad.CheckForUpdate();
}
public void PerformUpdate()
{
ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
UpdateCheckInfo updateInfo = ad.CheckForDetailedUpdate();
if (updateInfo.UpdateAvailable)
{
MessageBox.Show("There is an update available. Press OK to continue");
ad.Update();
MessageBox.Show("Application updated! Press OK to restart");
System.Windows.Forms.Application.Restart();
Application.Current.Shutdown();
}
}
}
在网络上进行测试时,我的开发机器已启动,这很好用 - 我的一些同事已经尝试运行应用程序,他们总是可以获得最新的更新。但是,当部署在我们的客户服务器上时,应用程序在尝试从计时器更新时崩溃。我们获得的重要性如下:
at System.Deployment.Application.ApplicationTrust.RequestTrust(SubscriptionState subState,Boolean isShellVisible,Boolean isUpdate,ActivationContext actCtx,TrustManagerContext tmc) 在System.Deployment.Application.DeploymentManager.DetermineTrustCore(布尔阻塞,TrustParams tp) 在System.Deployment.Application.DeploymentManager.DetermineTrust(TrustParams trustParams) 在System.Deployment.Application.ApplicationDeployment.CheckForDetailedUpdate(Boolean persistUpdateCheckResult) 在System.Deployment.Application.ApplicationDeployment.CheckForUpdate() 在TestApp.AppUpdater.CheckForUpdates() 在TestApp.MainWindow.versionTimer_Tick(Object sender,EventArgs e) 在System.Windows.Threading.DispatcherTimer.FireTick(未使用的对象) 在System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调,对象args,Int32 numArgs) 在MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source,Delegate方法,Object args,Int32 numArgs,Delegate catchHandler)
但有趣的是,如果您重新打开应用程序(它会提示您下载最新版本,然后下载并按预期运行),则可以正常工作。
有什么想法吗?谢谢!