2013-02-04 8 views
8

Abbiamo un'applicazione clickonce winform in C# a cui viene concesso il pieno trust e firmati utilizzando un certificato valido.Errore nell'aggiornamento completo delle attendibilità di Clickonce non riuscito con TrustNotGrantedException su Windows 8

L'applicazione funziona correttamente e si aggiorna correttamente su Windows XP, Windows 7. Tuttavia, su un computer Windows 8, non riesce ad aggiornare. L'applicazione funziona correttamente però. Tuttavia, la prima richiesta di aggiornamento per passare a una versione successiva non riesce con: System.Deployment.Application.TrustNotGrantedException

Il codice non è riuscito dopo la chiamata a ApplicationDeployment::CheckForDetailedUpdate() non riuscita. Chiedendo perché questo potrebbe accadere come lo stesso codice esatto sta funzionando bene su tutte le versioni precedenti di Windows. Qualsiasi aiuto sarà apprezzato. Di seguito è riportato il relativo stack trace:

System.Deployment.Application.TrustNotGrantedException: User has refused to grant required permissions to the application. 
    at System.Deployment.Application.ApplicationTrust.RequestTrust(SubscriptionState subState, Boolean isShellVisible, Boolean isUpdate, ActivationContext actCtx, TrustManagerContext tmc) 
    at System.Deployment.Application.DeploymentManager.DetermineTrustCore(Boolean blocking, TrustParams tp) 
    at System.Deployment.Application.DeploymentManager.DetermineTrust(TrustParams trustParams) 
    at System.Deployment.Application.ApplicationDeployment.CheckForDetailedUpdate(Boolean persistUpdateCheckResult) 
    at System.Deployment.Application.ApplicationDeployment.CheckForDetailedUpdate() 
+0

Provato un altro laptop Windows 8 e l'aggiornamento non è riuscito con lo stesso errore anche su quello. Ti chiedi cosa potrebbe andare storto con un'applicazione di fiducia completa. -Manish. – user2039804

risposta

5

L'unica volta che avevo visto questa traccia dello stack è stato quando ho provato a chiamare CheckForDetailedUpdate() senza impostare la fiducia esplicita prima mano. Dopo aver aggiunto il codice sottostante, ha funzionato il controllo degli aggiornamenti.

// Setup the trust level 
var deployment = ApplicationDeployment.CurrentDeployment; 
var appId = new ApplicationIdentity(deployment.UpdatedApplicationFullName); 
var unrestrictedPerms = new PermissionSet(PermissionState.Unrestricted); 
var appTrust = new ApplicationTrust(appId) { 
    DefaultGrantSet = new PolicyStatement(unrestrictedPerms), 
    IsApplicationTrustedToRun = true, 
    Persist = true 
}; 
ApplicationSecurityManager.UserApplicationTrusts.Add(appTrust); 

// Check for update 
var info = deployment.CheckForDetailedUpdate(); 
+0

non funziona per me –

0

Da questo MSDN page ci sono due cause. Ma sembra TrustNotGrantedException di solito è sollevato quando un nuovo aggiornamento ClickOnce è stato distribuito che utilizza più privilegi rispetto alla versione precedente ...

  • L'applicazione utilizza elevazione permesso e l'utente nega la richiesta di fiducia elevata; oppure
  • L'applicazione utilizza Trusted Application Deployment e il certificato digitale utilizzato per firmare l'applicazione non è elencato come un editore attendibile sul computer locale. Se è stato distribuito un aggiornamento a un'applicazione e l'aggiornamento utilizza più autorizzazioni rispetto alla versione precedente e ClickOnce genera un'eccezione TrustNotGrantedException, la nuova versione non installa.

quindi ha senso che sarebbe riuscire ad aggiornare, in quanto il livello di applicazioni di sicurezza è cambiato da quando l'utente li ha installato - in modo che avrà bisogno di reinstallarlo.