2013-02-04 11 views
8

Wir haben eine winforms clickonce-Anwendung in C#, die volle Vertrauenswürdigkeit gewährt und mit einem gültigen Zertifikat signiert wurde.Vollständige Clickonce-Trust-App-Aktualisierung fehlgeschlagen mit TrustNotGrantedException unter Windows 8

Die Anwendung läuft ordnungsgemäß und wird unter Windows XP, Windows 7 ordnungsgemäß aktualisiert. Auf einem Windows 8-Computer kann sie jedoch nicht aktualisiert werden. Die Anwendung wird jedoch ordnungsgemäß ausgeführt. Die erste Aktualisierungsanforderung für den Wechsel zu einer späteren Version schlägt jedoch fehl mit: System.Deployment.Application.TrustNotGrantedException

Der Code ist fehlgeschlagen, nachdem der Aufruf von ApplicationDeployment::CheckForDetailedUpdate() fehlgeschlagen ist. Sie fragen sich, warum dies passieren könnte, da derselbe Code in allen früheren Versionen von Windows einwandfrei funktioniert. Jede Hilfe wird geschätzt. Im Folgenden finden Sie die entsprechenden 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

Versuchte einen anderen Windows 8 Laptop und das Upgrade fehlgeschlagen mit dem gleichen Fehler auch auf diesem. Fragen Sie sich, was mit einer vollständigen Trust-Anwendung schief gehen könnte. -Manish. – user2039804

Antwort

5

Das einzige Mal, dass ich war dieser Stack-Trace gesehen hatte, als ich versuchte, CheckForDetailedUpdate() Aufruf ohne die ausdrückliche Vertrauen, bevor die Hand einrichten. Nach dem Hinzufügen des unten stehenden Codes funktionierte der Update-Check.

// 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

es funktioniert nicht für mich –

0

Von diesem MSDN page gibt es zwei Ursachen. Aber es scheint, TrustNotGrantedException ist in der Regel erhöht, wenn ein neues Update Clickonce bereitgestellt wurde, die mehr Privilegien als die vorherige Version verwendet ...

  • Die Anwendung verwendet die Erlaubnis Erhebung und der Benutzer verweigert die Anforderung für erhöhte Vertrauen; oder
  • Die Anwendung verwendet Trusted Application Deployment und das zum Signieren der Anwendung verwendete digitale Zertifikat ist nicht als vertrauenswürdiger Herausgeber auf dem lokalen Computer aufgeführt. Wenn Sie ein Update für eine Anwendung bereitgestellt haben und das Update mehr Berechtigungen als die vorherige Version verwendet und ClickOnce eine TrustNotGrantedException auslöst, wird die neue Version nicht installiert.

So macht es Sinn, dass es zu aktualisieren, würde scheitern, weil die Anwendungen Sicherheitsstufe, da der Benutzer geändert hat zuletzt installiert - so werden sie es neu installieren müssen.