2013-02-04 24 views
8

我們在C#中有一個winforms clickonce應用程序,它被授予完全信任並使用有效證書進行簽名。Clickonce完全信任的應用程序更新失敗,在Windows 8上TrustNotGrantedException

應用程序在Windows XP,Windows 7上正常運行並正確更新。但是,在Windows 8計算機上,它只是無法更新。應用程序可以正常運行。但是,向上移動到更高版本的第一個更新請求失敗,原因如下:System.Deployment.Application.TrustNotGrantedException

調用ApplicationDeployment::CheckForDetailedUpdate()失敗後代碼失敗。想知道爲什麼會發生這種情況,因爲完全相同的代碼在所有以前版本的Windows上運行良好。任何幫助將不勝感激。下面是相關的堆棧跟蹤:

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

嘗試了另一臺Windows 8筆記本電腦,升級失敗,同樣的錯誤。想知道完整的信任應用程序會出現什麼問題。 -Manish。 – user2039804

回答

5

我看到這個堆棧跟蹤是當我打過電話CheckForDetailedUpdate()沒有手之前,設置明確的信任之時。添加下面的代碼後,更新檢查工作。

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

它不適合我 –

0

從這MSDN page有兩個原因。但似乎當一個新的ClickOnce更新已部署了一個使用更多的權限比以前的版本TrustNotGrantedException通常提出...

  • 應用程序使用許可高程和用戶拒絕高架信任的請求;或
  • 應用程序使用可信應用程序部署,並且用於簽署應用程序的數字證書未在本地計算機上列爲可信發佈者。 如果您已經爲應用程序部署了更新,並且更新使用的權限比以前的版本更多,並且ClickOnce引發TrustNotGrantedException,則新版本將不會安裝

所以它是有道理的,這將無法更新,因爲應用程序的安全級別已經自用戶上次安裝它改變了 - 因此他們將需要重新安裝。

相關問題