ネタ元:SQLiteを使ったWindowsアプリを作成する
XCOPYはいけません。ちゃんとセットアッププロジェクトを作りましょう!<ここネタです。まじめに反応しないようにw
と、ここまではいいんですよ。。。問題は、データベースファイル。今回の場合 Inprocess で動くデータベースエンジンを使っています(SQLiteのManagedバージョン?)。
この場合、DBを使うアプリのアクセス権でデータベースファイルにアクセスします。ここで注意しなければいけないのが、「セットアッププロジェクト作って配布しましたー!という場合」。
ええ、何も考えずに、インストーラを作って、何も考えずにインストールしてみてください。
Vistaでいろいろいじってなければ、かなりの高確率でうれしくない現象が出ます。他のOSでも、管理者権限を持たないアカウントで実行すれば同様にうれしくない結果となるでしょう。
そう、アクセス権がないのです。
ではどうするか?
解決策は2種類あります。
ひとつは、利用ユーザーごとにデータベースファイルを独立管理する方法。通常この手段をとる場合は、アプリケーションの初回起動時に実行アカウントのアプリケーションデータフォルダ(ローカルアプリケーションデータフォルダでもよい)にコピーしてしまうという方法。
もう一つは、インストーラでインストール時にデータベースファイルにのみ標準ユーザーにも書き込み権限を追加するという方法。
どちらの手法をとるか?はそのアプリケーションやデータベースファイルがどのように使われるか?ユーザー間でのデータの共有はあるのか?などなどさまざまな部分が影響しあうため、正解はありません。
また、他にもデータファイルだけは、専用フォルダにインストールということもあります(その場合、VSセットアッププロジェクトじゃ絶対賄えませんけどねw)。
ま、いずれにしてもアプリケーションのユーザーが利用する状況を考えてアプリを作ってれば悩むべきタイミングは設計時点なのでセットアップを作成するころになって悩むようなことじゃないんですけどねwww