空談録

http://artfulplace.net/blogs/ からひっこしつつ

VSTOにおいてSecurityExceptionによってファイルがインストールできないとき

実はこの現象自分でもはまってたんですけどあんまり気にしてなかったんですよね…

というわけでVSTOでファイルをインストールする際にSecurityExceptionが出る場合の対処法について書いておきます

https://portalvhdsrp3qt9v47nzbn.blob.core.windows.net/publicphoto/fspic140526-2.png

こういうやつですね

インストール元: 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のセキュリティに引っかかっててインストールできないというわけです

https://portalvhdsrp3qt9v47nzbn.blob.core.windows.net/publicphoto/fspic140526.png

このプロパティの下のやつですね
アクセスがブロックうんぬんのせいで、もれなくVSTOインストーラマニフェストにアクセスできなくてインストールに失敗します

というわけでこの現象の対処法はプロパティの「ブロックの解除」を行うことで対処できます
解除すべきは.vstoと.dll.manifestの二つです。どちらか一つだと次の例外を吐きます

https://portalvhdsrp3qt9v47nzbn.blob.core.windows.net/publicphoto/fspic140526-3.png
これはvstoかdll.manifestのどちらかだけを解除するとこうなります。
あとはzipファイルのなかでvstoを実行した場合もこれ

ちなみに本体のdllとかOffice.Tools系のdllのブロックは解除しなくても問題なく動作します


 というわけでVSTOインストーラがブロックされる場合の対処法でした
今も作ってるのでこういうのは大事ですね

というかこういうエラーどうしても開発環境だと気づけないんですよね
わざわざインストールとかしないですし、たとえインストールしてもブロックされないですし…

おそらく管理者権限があれば問題なくインストールもできると思うのですが試してません
というよりはVM上で試してたら管理者での実行とかいまいち分からなくて試せてないという

最近どうも書くことがなくてあれですがまあ何かあったら書いてくスタイルでもいいかなぁ

この辺で