質問

ClickOnceでデプロイされたプロジェクトに取り組んでいますが、いくつかの問題を抱えています。

私のソフトウェアソリューションには2つのコンポーネントがあります。 .NET を必要とするデスクトップクライアントです。実行するフレームワーク3.5、および利用可能なドキュメントをリストするサーバー( ASP.NET アプリケーション) ClickOnceを使用してデスクトップクライアントをインストールする方法を提供します。

最初の問題は前提条件の問題です。クライアントのインストールの前に3.5フレームワークをインストールする方法が必要です。 Visual Studioはそれを処理する setup.exe を作成しますが、それを機能させるには、( .application ファイルにリンクする代わりに)直接実行する必要があります)、およびClickOnceマニフェストの作成時に展開 URL を知っている必要があります。

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

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

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

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

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

役に立ちましたか?

解決

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

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

  • ManifestReader.ReadManifestを使用してマニフェストを読み取ります
  • DeploymentUrlを設定
  • ManifestWriter.WriteManifest

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

署名プロセスに悩まされます。使い捨ての証明書を使用する必要があります(署名が無意味になります)またはCAからの証明書を使用する必要があり、マニフェストを再署名するためにパスワードを配布する必要があります(証明書が安全でなくなるため愚かです) 。そのため、ユーザーには「不明な発行元」が表示されたままになるようです。黄色の感嘆符...

他のヒント

継続的ビルドシステムでClickOnceアプリケーションをビルドし、複数のテストサーバーに展開するために、 Mage および記事 ウォークスルー:ClickOnceアプリケーションを手動でデプロイする

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

たぶん解決策は次のようになります:

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

おそらく、ClickOnceには、アプリケーションのダウンロード元のサーバーを検出するオプションが必要です。誰かがここに投稿してください知っている場合;

ユーザーがドメインにいる場合、グループポリシーを使用して、sysadminが.NET 3.5をプッシュするようにします。 / Windows Update またはデスクトップの管理に使用されているその他の戦略。

環境の問題のように聞こえます。組織にシステム管理者がいるほどの規模がある場合、アプリケーションを実行する環境を提供するのはその人の責任である必要があります。

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

他のオプションは、.NET 3.5を取得してインストールし、アプリケーションをインストールするスクリプトを書くことだと思います。これは以前にやったことがありません。 .NET 3.5を取得するグループポリシーを介して起動スクリプトを展開できます。これは非常に簡単です。

おそらく NAnt を活用して、展開URLの変更を自動化できます。 ClickOnceビルドを自動化し、マニフェストのビルドバージョンを変更するために使用します。 ClickOnce with NAnt では、やった。

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)をどのようにインストールしますか。 グループポリシー(GP)スクリプトまたは WMI

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top