Visual BasicとAccessDBを配布パッケージにする

プログラミング

昔はデスクトップアプリでAccessDB繋いでいるアプリケーションって王道だったと思うけど、今はなかなか情報が見つからなかった。

Visual Basicで快適にAccessDBをつないでプログラムを開発したまではいいんです。

でもTable Source見ると”C:¥Windows….”とドライブレターからしっかりフルパスで定義されている。

これ、配布パッケージにしたら明らかにまずいよね。他人のパソコン上にtakaoフォルダーなんてあるわけないじゃん。

しかもAccessDBをどうやって同梱すりゃいいんだ?

手元にある”VisualBasic 2017パーフェクトマスター”は乱暴にも”Exeを配布すりゃいいんだよ。” VisualBasic 逆引き大全”にはなにも配布については書いてない。
“Visual Basic 2017 データベース開発入門”はSQL Server前提なので役にたたない。ただ、ClickOnceというインストール方法に言及していてくれたのは参考になった。この方法は後述する問題から使えませんでしたが。

昔はInstall Shieldの無料版使ったよなぁ、とか思いながら”Visual Studio 2017 インストーラー”でGoogle先生に聞くと多くの先人が”インストーラーはMS提供の簡単なものがあるから導入して、同じソリューション内にsetupプロジェクトを作るのです”と教えてくださった。

そのとおりやると、とりあえずはインストーラーパッケージができあがる。
AccessDBはファイルエクスプローラーでApplicationにAddしたら同梱された。
(どこかに掲載されていたPostBuildEventの作成はプログラムを”Program Files”に入れるのであれば致命的な矛盾を起こすのでやめましょう。)

問題はデータベースのconnectionString(接続文字列)だ。
これもGoogle先生に英語で聞くと、外人の先生が”app.configを修正すればいいのだよ。”と教えてくださっているので、私の場合、プログラムモジュールとデータベースは同じ場所に置くと決めつけて、ConnectionStringを”./database.accdb”と書き直してインストーラーを作成した。するとprogramname.exe.configっていうXMLファイルができており、VBはスタートアップの時にこれを読んでくれるらしい。
ConnectionStringもしっかりapp.configからコピーされている。

ダイナミックにやる場合は、PostInstallationで追加のGUIを作るらしいが、そこまではやらなくて済んだのでこれでよしとする。

アプリケーションのショートカットは、いったんアプリケーションフォルダーにあるプロジェクトファイルを右クリックしてショートカットを作ってから、移動する。
以外にバタ臭いので戸惑う。

アプリケーションの置き場所は今回はユーザーのappdata内、つまり[LocalApplicationData]にした。ここらへんの[]で囲まれる特別なフォルダー名はここを参考にさせていただいた。

インストールプロジェクトは右クリックでインストール、アンインストールのテストまでできる親切プロジェクトでした。

トータルでみるとMicroSoftはAccessDB同梱のアプリケーションを制作する道具立てを全部そろえていてくれたということに気づきました。ありがとうございます。

上記、今日、数時間調べてようやく配布パッケージができた、と思う。

7月27日にWindowsパソコン買って、8月9日に一応、形が整ったわけで2週間で簡単なアプリながら開発できたのは、ひとえにVisual Studio 2017がいたれりつくせりのWindows開発ツールだったからです。

疲れた。おやすみ。

コメント