ClickOnceのビルド内容を、構成にあわせて変更したいのですが、どのようにすればいいのでしょうか?
顧客A社・B社へ提供するそれぞれ少し仕様が異なるものの、大半の内容が共通しているソフトウェアがあるとします。
今までは、同一のソースコード内を元に、構成と#Ifにて「少し仕様が異なる部分」の違いを作って、最終的にビルド結果を区別してお渡ししてました。
しかし、そうしてセットアッププロジェクトで作られたexeを毎回A社・B社の中にいる一人一人へ配布するのは大変です。
そこで、自動的にアップデートする仕組みを導入することになりました。
白羽の矢が立っているのがClickOnceなのですが、ツールバーの構成を変えてもA・B社混ざったような出力結果になって、顧客分けができず困っています。
※なお、顧客毎にビルド内容が異なるプログラムを自動アップデートできる仕組みが容易に作れるのであれば、ClickOnceにはこだわりません。
ただ料金は安いものである必要があります。
よろしくお願いいたします。
>>アップデートが発生している事をユーザーに通知
これを実現するには起動時にクライアント側にあるアプリとサーバー側にあるアプリの
バージョンをチェックする必要があります。ここまで実装するなら自動アップデートするように
しても、あまり手間は変わらない気がします。
ClickOnceを使用しないのであればアプリケーションのランチャーを1つ作成し、そのアプリ経由で今までのアプリを起動するという
仕組みはどうでしょうか(あくまで案なので環境により実現できない場合もあります。)
クライアントに用意するもの
●ランチャー(新規に作成)
●ランチャー用の設定ファイル(アプリのダウンロード先とランチャーから起動するアプリを設定)
サーバーに用意するもの
●ファイル一覧(ファイル名とファイルごとのバージョンが記述されている)
●配布アプリケーションのファイル
1.ランチャーの起動時に「ランチャー用の設定ファイル」を読み込ませる。
2.「ランチャー用の設定ファイル」で指定されたダウンロード先に置いている「変更ファイル一覧」を探す。
クライアントに「ファイル一覧」が存在しない、またはサーバー側の更新日時が新しい場合、「変更ファイル一覧」を
ダウンロードする。
設定ファイルをダウンロードしなかった場合、アップデートファイルはないのでアプリを起動しランチャーは終了する。
※「ファイル一覧」を用意する理由は、毎回起動時に直接サーバにある配布アプリすべてと
ファイル比較をしてしまうと朝や昼休みが終わった時間帯にサーバー側に負荷が掛かってしまうので、それを防ぐため。
この方法だとアップデートするものが無い場合は「ファイル一覧」ファイルとの1度の比較だけで済みます。
3.ダウンロードした「ファイル一覧」を読み込み、クライアント側のインストールされているファイルの
バージョンと比較を行い、新しいバージョンをダウンロードする。
4.アプリケーションを起動し、ランチャーは終了する。
環境により、ダウンロードの方法をコピーにするのかFTPでファイル転送するかなどを
増やさないと駄目かもしれませんが、他のアプリでも設定を変更するだけで自動アップデートできます。
VBではないのですが、BCB等のC言語でのソフトの開発を行っています。
私の会社でも、あるソフトを作成する際、各社異なる仕様で少しずつ変えてリリースしなければならないことが多々あります。
その時には、INIファイルのような設定ファイルを別に持たせています。
その設定ファイル内に、各社ごとに値を持たせ(A社は0、B社は1等)、ソースコードでその値を読み込むことで、
if文でその値により各社の仕様を満たす事ができるような処理を作成しています。
INIファイルではなく、レジストリでもいいかなとは思いますが、ソースコードの管理は一つで済むと思います。
ソフト変更時には、作成したソフトの送付が必要になってきますが・・・。
halohalolinさんがされようとしている内容と異なるようでしたらすみません。
>>アップデートが発生している事をユーザーに通知
これを実現するには起動時にクライアント側にあるアプリとサーバー側にあるアプリの
バージョンをチェックする必要があります。ここまで実装するなら自動アップデートするように
しても、あまり手間は変わらない気がします。
ClickOnceを使用しないのであればアプリケーションのランチャーを1つ作成し、そのアプリ経由で今までのアプリを起動するという
仕組みはどうでしょうか(あくまで案なので環境により実現できない場合もあります。)
クライアントに用意するもの
●ランチャー(新規に作成)
●ランチャー用の設定ファイル(アプリのダウンロード先とランチャーから起動するアプリを設定)
サーバーに用意するもの
●ファイル一覧(ファイル名とファイルごとのバージョンが記述されている)
●配布アプリケーションのファイル
1.ランチャーの起動時に「ランチャー用の設定ファイル」を読み込ませる。
2.「ランチャー用の設定ファイル」で指定されたダウンロード先に置いている「変更ファイル一覧」を探す。
クライアントに「ファイル一覧」が存在しない、またはサーバー側の更新日時が新しい場合、「変更ファイル一覧」を
ダウンロードする。
設定ファイルをダウンロードしなかった場合、アップデートファイルはないのでアプリを起動しランチャーは終了する。
※「ファイル一覧」を用意する理由は、毎回起動時に直接サーバにある配布アプリすべてと
ファイル比較をしてしまうと朝や昼休みが終わった時間帯にサーバー側に負荷が掛かってしまうので、それを防ぐため。
この方法だとアップデートするものが無い場合は「ファイル一覧」ファイルとの1度の比較だけで済みます。
3.ダウンロードした「ファイル一覧」を読み込み、クライアント側のインストールされているファイルの
バージョンと比較を行い、新しいバージョンをダウンロードする。
4.アプリケーションを起動し、ランチャーは終了する。
環境により、ダウンロードの方法をコピーにするのかFTPでファイル転送するかなどを
増やさないと駄目かもしれませんが、他のアプリでも設定を変更するだけで自動アップデートできます。
hiroderさんありがとうございます。
INIファイルで識別する方法、参考になります。
なお、私の方ではその後
「別に自動的にアップデートしなくても、アップデートが発生している事をユーザーに通知して、
ボタンをクリックしたらダウンロードページをブラウザで開く。
実際のアップデート作業は、ユーザーが手動で行う」
でも、OKだという話になってきたので、今のところその方向で進めています。