C# ClickOnce-部署后更新时出错

C# ClickOnce-部署后更新时出错,c#,wpf,clickonce,C#,Wpf,Clickonce,我有一个使用ClickOnce部署的WPF应用程序,该应用程序部署到所有客户端都可以访问的网络驱动器上,我在应用程序中有一个计时器,每10分钟启动一次,检查更新,并在有更新时自动安装。我的更新类如下: public class AppUpdater { public bool CheckForUpdates() { ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;

我有一个使用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();
        }

    }
}
当我的开发机器在网络上进行测试时,它运行得很好——我的一些同事已经试过运行这个应用程序,他们总能获得最新的更新。然而,当部署在我们的客户服务器上时,应用程序在尝试从计时器更新时崩溃。我们得到的优惠如下:

在System.Deployment.Application.ApplicationTrust.RequestTrustSubscriptionState子状态下,布尔值为ShellVisible,布尔值为Update,ActivationContext actCtx,TrustManagerContext tmc 在System.Deployment.Application.DeploymentManager.DetermineTrustCoreBoolean阻塞中,TrustParams tp 位于System.Deployment.Application.DeploymentManager.DetermineTrustTrustParams trustParams 位于System.Deployment.Application.ApplicationDeployment.CheckForDetailDupDateBoolean persistUpdateCheckResult 位于System.Deployment.Application.ApplicationDeployment.CheckForUpdate 在TestApp.AppUpdater.CheckForUpdates上 在TestApp.MainWindow.versionTimer\u对象发送方,EventArgs e 在System.Windows.Threading.Dispatchermer.FireTickObject未使用 在System.Windows.Threading.ExceptionWrapper.InternalRealCallDelegate回调中,对象args,Int32 numArgs 位于MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhenObject源、委托方法、对象参数、Int32 numArgs、委托catchHandler

但有趣的是,如果你重新打开应用程序,它会提示你下载最新版本,然后下载并按预期运行


有什么想法吗?谢谢

那么你可以在不重新启动应用程序的情况下安装更新了吗?如果没有,,如果应用程序必须在没有用户输入的情况下重新启动,这对用户非常不友好,为什么不直接提示用户新版本已经准备好,并允许用户在准备好后重新启动应用程序?这基本上是客户的要求,因为他们希望确保所有用户都使用最新版本。这是一个内部应用程序,仅供公司