16


4

ClickOnceの展開に関する問題

私はClickOnceで展開されたプロジェクトに取り組んでいます、そして私はいくつかの問題を通して走っています。

私のソフトウェアソリューションには2つのコンポーネントがあります。実行するにはhttp://en.wikipedia.org/wiki/.NET_Framework [.NET] framework 3.5が必要なデスクトップクライアントと、サーバー(http://en.wikipedia.org)です。 /wiki/ASP.NET [ASP.NET] application)は利用可能なドキュメントをリストアップし、ClickOnceでデスクトップクライアントをインストールする方法を提供します。

私の最初の問題は、前提条件の問題です。クライアントをインストールする前に、3.5フレームワークをインストールする方法が必要です。 Visual Studioはそれを処理する `+ setup.exe `を作成しますが、機能させるためには( .application + `ファイルにリンクするのではなく)直接実行し、http:/を展開する必要があります。 ClickOnceマニフェストを作成するときは、/ en.wikipedia.org / wiki / Uniform_Resource_Locator [URL]を知っている必要があります。

したがって、さらに2つの問題があります。明らかに、 + setup.exe +`でインストールした後、クエリ文字列引数を使用してクライアントアプリケーションを実行する方法はないため、「.. ./client.application?document=doc1 " + setup.exe + `へのリンクしか持てません。

もう1つの問題は最悪です。サーバーは、比較的小規模なプライベートネットワークでの使用を目的としており、単一のWebサーバー上での使用を意図していません。 問題は、ビルド時にClickOnceクライアントの展開URLがわからないため、「Webサイトからインストール」オプションがオンになっていると、 + setup.exe +`が正しく実行できないことです。 現在のところ、回避策は、大きなZIPファイルに `+ setup.exe +、前提条件、およびClickOnceデプロイメントファイルを含むオフラインインストーラーを使用することです。

適切なフレームワークバージョンを使用しているユーザーは、ドキュメントへのクエリ文字列を含む `+ .application `リンクを使用して、クライアントをインストール/更新し、ドキュメントを開くことができます。 フレームワークを持たないユーザーはエラーメッセージ(「システム更新にはblablabla 3.5.0.0 blabla GAC」が必要)を受け取り、ZIPファイルをダウンロードし、ローカルマシンに解凍して、 ` setup.exe +`ファイルを実行してインストールする必要がありますフレームワーク、そしてクライアント。 そしてその後、彼はドキュメントリストに戻ってリンクを使用して適切な引数でクライアントを起動しなければなりません。

言うまでもありませんが、私はこの戦略を誇りに思っているわけではありません。この戦略は、すべてのClickOnce展開の利点を損なうものです。

より洗練された方法で前提条件の問題を取り除くことは可能ですか? サーバーをネットワークにデプロイするときにClickOnceアプリケーションのインストールURLを変更する簡単な方法はありますか(構成ファイルなどにURLを書き込むなど)。

6 Answer


6


私も「ビルド時にclickonceクライアントのデプロイURLがわからない」という問題を解決しようとしています。

私が思いつくことができる最善の策は(私はそれを書き始めたので、これはまだ推測です)、deploymentURLを設定するエンドユーザーが実行するユーティリティを書くことです。 これは.NETでは可能であるように見えますが、次のことが必要です。

  • ManifestReader.ReadManifestを使用してマニフェストを読み込む

  • DeploymentUrlを設定します。

  • ManifestWriter.WriteManifest

その後、SecurityUtilities.SignFileを使用してマニフェストにもう一度署名する必要があります。

署名プロセスは私を悩ませます。 私は使い捨ての証明書を使う必要があります(これは署名に意味がありません)、またはCAからの証明書を使い、次にマニフェストを辞任するためにパスワードを配布しなければなりません(証明書が安全でなくなるので愚かです) 。 そのため、「不明な発行元」と黄色の感嘆符が表示されたままになります。


5


私たちの継続的なビルドシステムでClickOnceアプリケーションをビルドし、いくつかのテストサーバーにデプロイするために、私はhttp://msdn.microsoft.com/en-us/library/acz3y3te.aspx[Mage]と記事_httpを使って時間を過ごしました。 //チュートリアル:ClickOnceアプリケーションの手動展開] _。//msdn.microsoft.com/ja-jp/library/xc3tc5xx.aspx

これで2番目の問題が解決するかどうかはわかりませんが、複数のサーバーにデプロイする場合は少なくともビルドプロセスに多少の負担がかかる場合があります。 `+ mage.exe +`を配布できる場合(Microsoftが許可しているかどうか不明)、インストール中にオンサイトでマニフェストを変更できます。


1


多分解決策は次のようになります。

PublishUrl = http:// * clickonce * / is / kinda / coolを使用し、クライアントコンピュータで*%windir%\ system32 \ drivers \ etc \ hosts にあるWindowsのhostsファイルを変更し、ホストのclickonceを fixedに指定します。サーバーのIPアドレス*。

ClickOnceには、アプリケーションのダウンロード元のサーバーを検出するためのオプションがあるはずです。誰かが知っているならここに投稿してください。


0


おそらく NAntを利用してデプロイメントURLの変更を自動化することができます。 ClickOnceのビルドを自動化してマニフェストのビルドバージョンを変更するために使用します。 _http://aaronsprague.com/blog/post/Automate-ClickOnce-with-Nant.aspx [ClickOnce with NAnt] _は私がどのようにしたかを説明しています。


0


ユーザーがドメインに所属している場合は、http://en.wikipedia.org/wiki/Group_Policy[Group Policies] / http://en.wikipedia.org/wiki/Windows_Updateを使用してsysadminに.NET 3.5をプッシュさせます。 [Windows Update]またはデスクトップを管理するために使用されているその他の戦略。

それは環境問題のように聞こえます。 組織がシステム管理者を持つことができるほど十分に大きい場合は、アプリケーションを実行するための環境を提供するのはその人の責任です。

組織にこの役割を担う人がいない場合は、手動による解決策に戻ったと思います。 また、手動で実行しても必ずしも「ClickOnceのすべての利点」が損なわれるわけではありません…​ ClickOnceの利点は、クライアントを変更して再公開することができ、クライアントマシンが自動的にアップグレードされることです。

私は他のオプションは取得してインストールするスクリプトを書くことであると思います .NET 3.5 and then installs the application, I haven’t done this 前…​ 私はそれがうまくいくだろうと合理的に確信しています…​ 実際には、.NET 3.5を取得するグループポリシーを介して起動スクリプトを展開することもできます。これは非常に簡単です。


0


  • 2番目の質問:*

次のように、プロジェクト、ソリューション、またはMSBuildファイルにMSBuild発行ターゲットを使用できます。

C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe "C:\path\foo.vbproj" /target:Publish /property:"PublishUrl=http://clickonce/is/kinda/cool/" /property:"PublishUrl=http://clickonce/is/kinda/cool/"

`+ PublishUrl `は、IDEでアプリケーションが公開される場所です。 ` InstallUrl `プロパティも ` UpdateUrl +`プロパティも指定されていない場合、ClickOnceアプリケーションマニフェストに挿入されます。

+ InstallUrl +(表示されていません)は、ユーザーがアプリケーションをインストールする場所です。 指定した場合、IsWebBootstrapperプロパティが有効になっている場合、この値は `+ setup.exe `ブートストラップに焼き付けられます。 ` UpdateUrl +`が指定されていない場合にも、アプリケーションマニフェストに挿入されます。

最初の質問:

上記の答えがあなたのニーズに対応していないのであれば、あなたは典型的な問題に直面しているようです。どのようにして複数のデスクトップにインストールされたWindows実行ファイル(あなたの場合.NET Framework 3.5)を入手するのですか。 Group Policy(GP)スクリプトやhttps://en.wikipedia.org/wiki/Windows_Management_Instrumentation[WMI]のような複数の解決策があります。