序文
この記事では、VSTO無し商用証明書のシナリオの下で配布方式を最適化することを目指し、目標は、クライアントの簡単なインストール、自動更新を達成することです。
プロジェクト
私はオフに数ヶ月を過ごしたし、Excel VSTOを放り出す、流通段階で多くの問題が発生しました。
困ったが、継続的な努力(検索)を介して、最終的にはより完全なソリューションを得たものの、その後、作者または2を共有します。
主なアイデア:ClickOnceのVSTO 1つのスリーブ装着装置の前に、証明書をインポートなど、インストールパッケージVSTO自動的に自動的に、ダウンロードした後。
- 自家製の証明書
- VSTOと契約
- 公開されたVSTO
- 自家製のインストーラ
- インストールは重要な方法である:自家製試みは、証明書をダウンロードし、ユーザーのマシンをインポートします
- インストーラのキー方法2:証明書のインポートが失敗した場合、レジストリへの書き込みをしてみてください
- インストーラキーを3:VSTOインストールファイルをダウンロードし、実行します
- インストールは重要な方法である:自家製試みは、証明書をダウンロードし、ユーザーのマシンをインポートします
- 公開されたインストーラ
:あなたは私が最終的に実現した結果を見ることができない、商業プロジェクト、私は.NET FrameworkとInterop.Excelプロジェクトは、最新のバージョンを選択した、任意の互換性の問題を持っていないので、それはシステムやオフィスの多くの低バージョンと互換性がないかもしれません。しかし、心配しないでください、実際には、でも互換性は私のアイデアを配布考慮に入れても普遍的でなければなりません。安装测试
开源地址
エクセルVSTOの展開の概要
ちょうどあなたが(Outlookを使用して、Microsoftの公式マップ)のファイル構造を取得します、Visual Studioの中で「公開」をクリックします。
:公開オプションは、「ClickOnceの」と呼ばれる使用してClickOnceのことで展開ANオフィスソリューション-のVisual Studio docs.microsoft.comの
注:
公式サイトもVSTOの方法を公開するには、Windowsインストーラパッケージを説明し、このアプローチは、自動アップグレードをサポートしていません。
このようAdvancedInstallerなどの一部のサードパーティ製のパッケージングツールは、私は、彼らが自動的にVSTOのうち、パッケージをアップグレードすることができるかどうかはわかりません。その理由は、彼らはすべての後、彼らはプロのものです、行うことができる「はずです」。
比較のために今日のアプリケーションストアで、このリリースは非常に良い方法であると思われていません。
あなたは、インストーラが自動的に、あなたが開いて設定されたネットワークパスからファイルを引っ張ってくる、あなたのサイトからsetup.exeをダウンロードするためにユーザーを割り当てることができ
、インストールが完了した後、それはすべてが非常に完璧に見える......それが自動的に更新保つことができ、しかし、あなたはすでにクレジット取得するシステムがある場合にのみコード証明書を。
私もコモドから個々のコード証明書を申請しようとした、しかし、コミュニケーションの崩壊後、個人的なコードは、私が中国であったが、証明書にフェイス・ツー・フェイスの検証を必要としているようだ......
あなたは自分のテスト証明書を実施するために使用しているなどのClickOnceを公開し、あなたのウェブサイト上のインストールソースを設定しようとすると、さらに妄想はそれが自動的に最新の状態に保つことができますする場合は......、あなたはこれを取得します:
もちろん、この写真は私のオンライン何気なく見て、私は物流の問題が完全に解決されている所有し、それが再びこのインタフェースを発生しません。
ネットワーク上のプログラム
アカウントに簡単なインストールと自動更新を取るために、私は様々なネットワーク上で読んでQ&A
、
答えは2つの派閥に分かれています。「自家製証明派」と「レジストリ学校を変更する」(以下、「学校の証明書」と「レジストリ学校」と呼ばれます)。
学校証明書:自家製のコード証明書、ユーザーは、自分の証明書をインポート見ることができるようコマースソフトウェアMAXの記事の
レジストリ派閥を:参照、マシンを設定するように促すレジストリを注入し、信頼関係を変更するMicrosoftの公式ドキュメントを
证书派的导入自制证书需要让用户多出一步操作,注册表派的注入注册表也需要让用户在安装VSTO之前运行一个事先写好的脚本。
我的分发方案
我的思路非常简单,如开头所述,
就仅仅是在VSTO的ClickOnce之前加一层安装器,进行证书导入等操作,之后自动下载VSTO安装包、自动运行。
- 自制证书
工具任选,自制一个代码证书,最终效果差不多是这样:
如果你不知道如何自制证书,那么可以从这里得到帮助。 - 给VSTO签名
- 发布VSTO
虽然你使用了不受用户信任的自制证书,但你可以假装它是正规商业证书,直接把你的VSTO发布到站点上就是了。
到此为止,你已经成功获得了一个用户无法安装的VSTO。它应该会有一个类似于“setup.exe”的文件,不要让用户直接下载它,它应该由你的自制安装器下载到用户电脑上。 - 自制安装器
它的名字可能会类似于“Installer.exe”,既可以是命令行脚本也可以是拥有华丽界面的WPF程序,这些都不重要,你可以随心所欲。
重要的是,它应该是一个单文件软件,开袋即食的那种单文件软件,以方便用户下载、直接点击运行。
它的作用主要有以下三点,我将以代码说明:尝试下载自制证书,并导入用户机器
private async Task CertAsync() { string localFullName = $"{DownloadPath}sn.cer"; Uri uri = new Uri("http://Public.mujiannan.me/1Math/sn.cer"); await DownloadAsync(uri, localFullName); using (X509Certificate2 myCert = new X509Certificate2(localFullName)) { using (X509Store store = new X509Store(StoreName.Root, StoreLocation.LocalMachine)) { store.Open(OpenFlags.ReadWrite); store.Remove(myCert); store.Add(myCert); } } }
若证书导入失败,则尝试写入注册表
internal static void SetTrustPromptBehavior() { RegistryKey key; if (System.Environment.Is64BitOperatingSystem) { key=Microsoft.Win32.Registry.LocalMachine.CreateSubKey( @"SOFTWARE\Wow6432Node\MICROSOFT\.NETFramework\Security\TrustManager\PromptingLevel"); } else { key=Microsoft.Win32.Registry.LocalMachine.CreateSubKey( @"SOFTWARE\MICROSOFT\.NETFramework\Security\TrustManager\PromptingLevel"); } key.SetValue("MyComputer", "Enabled"); key.SetValue("LocalIntranet", "Enabled"); key.SetValue("Internet", "Enabled"); key.SetValue("TrustedSites", "Enabled"); key.SetValue("UntrustedSites", "Enabled"); key.Close(); }
下载VSTO安装文件,运行
这一步事实上是下载了VSTO-ClickOnce的setup.exe文件并自动运行private async Task SetUpAsync() { string localFullName = $"{DownloadPath}setup.exe"; Uri uri = new Uri("http://Public.mujiannan.me/1Math/setup.exe"); Reportor.Report($"下载{uri.AbsolutePath}至{localFullName},请耐心等待..."); await DownloadAsync(uri, localFullName); System.Diagnostics.Process.Start(localFullName); }
下面是我制作的安装器的后台主方法:
タスクStartInstallerAsyncは非同期パブリック()
{
// 2つの操作(レジストリに、証明書をインポート)を実行する
証明書のインポートが失敗した場合、レジストリの代わりにしてみてください//優先輸入証明書を
二つのステップが失敗//、外パス例外情報
}string errInfo = string.Empty;//用于记录错误信息 bool trustSuccess = false;//标记证书是否导入成功 try { await CertAsync();//导入证书 trustSuccess = true; } catch (Exception Ex) { errInfo += Ex.Message;//记录证书导入错误消息 Reportor.Report("错误:证书导入失败,请联网并使用管理员权限运行"); } if (!trustSuccess) { try//事实上,如果上一步证书没导入成功,再来尝试写注册表也基本上是无济于事的 { Reg.SetTrustPromptBehavior();//写入注册表 trustSuccess = true; } catch (Exception Ex) { errInfo += Ex.Message; this.Reportor.Report("错误:注册表写入失败,请尝试使用管理员权限运行"); } } if (trustSuccess)//当导入证书与注册表写入有任何一项成功时,都可以正常执行下载、安装的操作 { await SetUpAsync(); } else { await Task.Delay(2000);//显示最终的错误信息前,留点时间告诉用户要用管理员权限运行 throw new Exception(errInfo);//别在本地存日志之类的,直接显示出来吧…… }
投稿インストーラ
自動的にセットアップのVSTO-のClickOnceをダウンロードし、自動的に証明書をダウンロードし、自動的に証明書をインポートする:あなたが唯一のエンドユーザーにインストーラを公開、または他のチャネルを介して、インストーラをダウンロードする必要があり、インストーラがあなたのサイト上で実行するようにスケジュールされます.exeファイル、自動的にVSTOをインストールします。追伸
初心者のための非技術的な教育プログラムとして、いくつかは、プロの開発者の目にはVSTOクラスの分布のように、単に私のつまずきになる問題の問題とみなすことがないかもしれません。
私はいつも自然にこれらの事を扱うプロの開発者と信じて、私は頭痛の種であるこれらの問題に直面して、開発者のいくつかの私のような自己のエントリがあることを知っています。
うまくいけば、この記事では、一部の人々は、商用証明書シーンのVSTO分布せずに問題を処理するために助けることができます。
道路上の学習、順風満帆!