VSTOにおいてSecurityExceptionによってファイルがインストールできないとき
実はこの現象自分でもはまってたんですけどあんまり気にしてなかったんですよね…
というわけでVSTOでファイルをインストールする際にSecurityExceptionが出る場合の対処法について書いておきます
こういうやつですね
インストール元: file:///C:/Users/f_swallow/Downloads/JsonImportsToExcel2/JsonImportToExcel.vsto
************** 例外テキスト **************
System.Security.SecurityException: このアプリケーションのカスタマイズされた機能は動作しません。JsonImportToExcel の配置マニフェストに署名するときに使用された証明書が信頼されていないか、アプリケーションが信頼された場所にありません。詳細については管理者に問い合わせてください。
場所 Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInTrustEvaluator.VerifyTrustPromptKeyInternal(ClickOnceTrustPromptKeyValue promptKeyValue, DeploymentSignatureInformation signatureInformation, String productName, TrustStatus status)
場所 Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInTrustEvaluator.VerifyTrustUsingPromptKey(Uri manifest, DeploymentSignatureInformation signatureInformation, String productName, TrustStatus status)
場所 Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInTrustEvaluator.VerifyTrustUsingPromptKey(Uri manifest, DeploymentSignatureInformation signatureInformation, String productName)
場所 Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.ProcessSHA1Manifest(ActivationContext context, DeploymentSignatureInformation signatureInformation, PermissionSet permissionsRequested, Uri manifest, ManifestSignatureInformationCollection signatures, AddInInstallationStatus installState)
場所 Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.VerifySecurity(ActivationContext context, Uri manifest, AddInInstallationStatus installState)
場所 Microsoft.VisualStudio.Tools.Applications.Deployment.ClickOnceAddInDeploymentManager.InstallAddIn()
失敗したアセンブリのゾーン:
MyComputer
うそっ…私のVSTOアドイン…作り直し!?
って思ってたんですがどうも原因は別でした
ちゃんとメッセージ読んでるとどうも気になる点が一つあるわけです
そう、"アプリケーションが信頼された場所にありません。"の一文です
普通にファイル置いてるだけで何が信頼されないんだと思ってたんですけどよく考えたらダウンロードしたファイルだったわけですよ
つまるところWindowsのセキュリティに引っかかっててインストールできないというわけです
このプロパティの下のやつですね
アクセスがブロックうんぬんのせいで、もれなくVSTOのインストーラはマニフェストにアクセスできなくてインストールに失敗します
というわけでこの現象の対処法はプロパティの「ブロックの解除」を行うことで対処できます
解除すべきは.vstoと.dll.manifestの二つです。どちらか一つだと次の例外を吐きます
これはvstoかdll.manifestのどちらかだけを解除するとこうなります。
あとはzipファイルのなかでvstoを実行した場合もこれ
ちなみに本体のdllとかOffice.Tools系のdllのブロックは解除しなくても問題なく動作します
というわけでVSTOのインストーラがブロックされる場合の対処法でした
今も作ってるのでこういうのは大事ですね
というかこういうエラーどうしても開発環境だと気づけないんですよね
わざわざインストールとかしないですし、たとえインストールしてもブロックされないですし…
おそらく管理者権限があれば問題なくインストールもできると思うのですが試してません
というよりはVM上で試してたら管理者での実行とかいまいち分からなくて試せてないという
最近どうも書くことがなくてあれですがまあ何かあったら書いてくスタイルでもいいかなぁ
この辺で