自作VBアプリのバージョンアップ方法

タグの編集
投稿者 とんぬら  (社会人) 投稿日時 2010/7/23 23:05:32
社内で使う顧客管理簿などをACCESSで作った程度の者です。

事情によりバーコードリーダーなど使い在庫管理簿を作ることになりそうで
ネットで検索していたところ、ここにたどり着きました。

在庫管理簿はフロントエンドとしてVB (せっかくなので2010で作ると思います)
データベースはPostgreSQLの予定です。
作ったソフトは、数支店で使う予定です。
※支店同士のデータ共有はありません。



で、作ったソフトの機能拡張や改善などのバージョンアップ(更新)について疑問があり
質問をさせていただきます。

ACCESSで作った自作ソフトもそうでしたが、
機能拡張や改善など発生したらその都度私が手直しをしておりました。

従来は私がいる支店でしか使っていなかったので問題なかったのですが
今度の在庫管理簿は、他の支店でも使う予定です。
この場合、機能拡張や改善、またその他要望などによりプログラム等の修正が発生した場合
他の支店で使っているVBのソフトはどのようにバージョンアップさせるのでしょうか?

イメージとしては(単純で申し訳ないですが…)
パソコンショップで売っているような事務系のソフトの場合と同じで
バージョンアップ版用のCDを作成して各支店に送りインストールしてもらう?
という方法になりますか?

この場合、バージョンアップ用のインストールプログラムも自作になるのでしょうか?
それとも巷にあるインストーラーで出来るのか?あるいはVisual Studio(2010)の標準機能で
作成可能なのか?

ディストリビューションウイザード
Visual Studio Installer
など関係ありそうなのですが、いまいちピンときません。

アドバイスやここのページが参考になるよ!など頂ければと思います。
よろしくお願いいたします。
投稿者 YuO  (社会人) 投稿日時 2010/7/24 00:57:41
バージョンアップとありますが,結局はどのインストーラーテクノロジを使うかに集約されると思うので,そういう方向で書きます。

インストーラーに関しては,Visual Studioでは2形式がサポートされています。
ひとつはClickOnce,もう一つはWindows Installerです。
# どちらかの形式にすることが推奨されます。自作はC++とWindows Installer SDKになりますが,そんな茨の道を行くことはお勧めしません。


・ClickOnce
発行ウィザードを使います。お手軽で,ネットワーク経由の自動アップデートなども可能です。
また,Express Editionsでもサポートされています。
ただし,Per Userインストールになり,インストール先も選択不可など,インストールに制限も加わります。

・Windows Installer
Windowsにおける標準的なインストーラー形式 (.msi) です。
Express Editions以外のセットアッププロジェクトを使ったインストーラーの作成で,この形式が作られます。
メジャーアップデートのみサポートですが,それが問題になることはあまりないと思います。
また,Windows Installer XML (WiX : http://wix.sourceforge.net/ ) というものを使うと,セットアッププロジェクトより細かくindows Installerを制御できます。
こちらをVS 2010に統合するためにはExpress Editionsでないバージョンが必要ですが,単体で実行する分にはExpress Editionsでも問題ありません。
# VS 2010に統合するためのバージョン (3.5) は現在βで,週次ビルドが出ています。

Windows Installer形式の場合は,自動アップデートはできませんが,Per MachineインストールもPer Userインストールも可能 (セットアッププロジェクトではPer Machineのみ) です。
例えば,SQL Server Express Editionsなども同時にインストールして設定することができます。
また,メジャーアップデートやマイナーアップデート,スモールアップデートといったアップデートの種類も用意されています。

ただ,マイナーアップデートによるパッチはテスト的に作ったことがあるけれど面倒でした。
VC++2008用で別の掲示板用で作った物ですが,
http://pub.idisk-just.com/fview/olN5vuUPjsD8DHIzezbv68Gvw-sWdttEUK_OQCcD_vSBOv29xlYGpH-XoEZxPqj0xU2esy1JRH-_RzgUF1XkCw.zip
とか,WiXの設定ファイルが面倒なことこの上ないことになりましたし,
1.0.0と1.0.1からパッチを作っても,1.0.2用のパッチは「1.0.0からのパッチ」+「1.0.1からのパッチ」の組み合わせになったりします。
結局,.mspではなく.msiで上書くのが正解だったりするという……。


MSDN: ClickOnce と Windows インストーラの使い分け
http://msdn.microsoft.com/ja-jp/library/ms973805.aspx
SITE: あなたのアプリにはどのインストーラが最適? - @IT (注:ClickOnceにはほぼ触れていません)
http://www.atmarkit.co.jp/fdotnet/vblab/compareinstaller/compareinstaller_01.html
SITE: WiX チュートリアル (日本語訳) — Windows Installer XML ツールセット入門
http://www.softark.net/wix/
投稿者 cupid  (その他) 投稿日時 2010/7/24 11:20:10
AccessVBAの場合はあまり知らないですが、今はVB2005でやっていて、
ソフト改定の場合は、安直に「.exe の差し替え指示」だけでやってますよ。
ただ、ユーザー側で、フォルダやファイルコピーについて熟知している必要あります。
また、Windows7の場合は、別の問題も起こり得ますが、今のテーマとは別問題。
あまり正統的なやり方じゃないとは言えるでしょうが、現実的に支障が無いから、
設定ファイルだの、色々インストール項目が多いなら、そうは行かないかもしれず..
投稿者 もちだ  (社会人) 投稿日時 2010/7/24 15:39:38
お初にお目にかかります。

うちの会社の…ネットワーク外のマシンの場合
まっさらの状態でインストールする場合はこうもいかないんですが…更新に限ると、cupidさんのようにEXEの差し替えで対応しています。ただ、操作できない人も居るには居るので、
1.CDに、データと自分で書いた”更新.BAT(仮)”を焼いて届ける
2.受け取った側で”更新.BAT(仮)”を実行。で、勝手にコピーして終わり。
(更新.BATの中身)CDからローカルにファイルをコピーするコマンドの羅列

うちの会社は幸いにもPCのドライブ構成がどこでも同じで、インストールする場所も固定としているのでこのような方法を採っています。
投稿者 とんぬら  (社会人) 投稿日時 2010/7/24 22:02:50
とんぬらです。

■YuO様
深夜にも関わらず大変丁寧なアドバイスをいただきありがとうございます。
記載いただきましたWebサイトなど拝見し何となくではありますがイメージがわきました。

いただいた内容から判断しますと、「Windows Installer」でインストーラーを作り
大規模なアプリでなければMinor Update以下でも(Small Updateでも)でも
フルインストールさせた方が無難そうですね。

アプリの開発が終わったら試してみたいと思います。
ありがとうございます。


■cupid様、もちだ様
お忙しいな中、アドバイスをいただきありがとうございます。
「.exeの上書き」の案は意外と行けるかもしれません。

初回インストール時にCドライブのみ限定すれば
もちだ様の案も意外と良いかもしれません。

ありがとうございました。
投稿者 トマト  (中学生) 投稿日時 2010/7/25 21:30:30
InnoSetupとか有名なインストーラは更新でもうまくやってくれたような…
投稿者 へつ  (社会人) 投稿日時 2010/7/26 13:08:31
exeを置いているサーバが共有されているのであれば、
iniにパスを書いておいて、「iniに従ってファイルを置き換えるexe」を作成してもいいかも。

本プログラムをA、更新用プログラムをBとすると
AがBをキック
Aが自分自身を終了
BがAを、新しいバージョンのA'で上書きして更新
BがA'を起動

AとBは必ず同じフォルダに存在する、というルールにすれば、
カレントへのコピーということで、フォルダ構成を考えなくていいですし。