9

C#にはwinforms clickonceアプリケーションがあり、完全な信頼が付与され、有効な証明書を使用して署名されています。

アプリケーションは正常に動作し、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()
4

3 に答える 3

6

このスタック トレースを見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();
于 2013-05-29T14:16:22.243 に答える
2

このMSDN ページには 2 つの原因があります。ただし TrustNotGrantedException、以前のバージョンよりも多くの権限を使用する新しい ClickOnce 更新プログラムが展開されたときに通常発生するようです...

  • アプリケーションはアクセス許可の昇格を使用し、ユーザーは昇格された信頼の要求を拒否します。また
  • アプリケーションは Trusted Application Deployment を使用しており、アプリケーションの署名に使用されたデジタル証明書が、ローカル マシンの信頼された発行元としてリストされていません。更新プログラムをアプリケーションに展開し、更新プログラムが以前のバージョンよりも多くのアクセス許可を使用し、ClickOnce が TrustNotGrantedException をスローした場合、新しいバージョンはインストールされません

したがって、ユーザーが最後にインストールしてからアプリのセキュリティレベルが変更されたため、更新に失敗することは理にかなっています。そのため、再インストールする必要があります。

于 2016-09-15T01:46:42.580 に答える