質問: ### 前提 ・WPFアプリ ・Visual Studio 2017 ・C# ### 発生している問題 作成したデスクトップアプリをインストーラー使用(visual studio installerで作成)して配布しようとしているのですが、インストーラーを作成しそこからダウンロードしたアプリを実行すると、ローカルで持っているDatabase Fileのアクセス権がなくアプリが落ちてしまいます。 (詳細) アプリはSQLiteのDBファイルを持っており、そのDBを操作してデータの読み書きを行っています。 インストーラー作成時に下図のように`.db`ファイルを手動で追加しています。 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/b3b4ba5183fd19508f4a9ce60fc2a7b2.png) インストール後のProgram Files配下にアプリ内に`.db`ファイルが格納されているのは確認済みです。 その後、自分のPCにてアプリを起動しDBの読み込み・書き込み処理を行うと問題がないのですが、他の人のPCでテストしてみると、 ・`System.UnauthorizedAccessException: 'パス 'C:\Program Files\hogehoge\hogehoge\hoge.db' へのアクセスが拒否されました` (個人情報箇所はhogeで代替しています) 上記のようなエラーが出てアプリが落ちてしまいます。試しにその人のPCにて`.db`ファイルの権限設定を変更するアプリが落ちなくなることがわかっています。 `.db`ファイルへのアクセス権をアプリをインストールしたユーザーに付与したいのですが可能でしょうか? また可能であればどのような設定が必要でしょうか? ご教授頂けると幸いです。
回答: `C:¥Program Files¥` 下に書き込み可能なデータファイルを配置することは推奨されていません。 読み出しだけならできますが、SQLite3のデータファイルを配置するに適切なフォルダーを指定するべきです。 以前に私が回答させていただいたものですが、こちらを参考になさってください。問題の原因は同じです。 Log4netのログの出力先について ※Visual Studio Installerは使ったことが無いので分からないのですが、書き込み可能な別のフォルダーを指定することができるのではないでしょうか。~~(できなかったらすみません)~~ **追記しました:**(2018/04/19 01:48) 質問者様の方で既に解決されているかもしれませんが、Visual Studio Installerを使い、書き込み可能なフォルダーとファイルを指定してみました。 Visual Studio Installerの「File System」ペインで「File System on Target Machine」ノードを右クリックすると、下図のようになります。 !イメージ説明 ここで「Add Special Folder」を選択すると様々なフォルダーが指定できるようになるので、適時、サブフォルダーを追加して*.db ファイル等のデータファイルを配置します。 ここで出てくる様々なフォルダーのPATHは System.Environment.GetFolderPath.aspx) で取得できます。 特殊ディレクトリのパスを取得する 例えば「ユーザーのアプリケーション データ フォルダー(L)」を指定し、更にその下にTest01フォルダーを追加して、DATA.txtファイルを配置すると以下のようなPATHになります。 `C:\Users\<ユーザー名>\AppData\Roaming\Test01\DATA.txt` このPATHは以下のようなコードで取得できます。質問者様の例で言えば、これで取得したPATHで、*.dbファイルへアクセスしよう、と言う訳です。 ``` string baseFolder = System.Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); string filePath = System.IO.Path.Combine(baseFolder, "Test01", "DATA.txt"); // 単なるファイルの存在確認 if (File.Exists(filePath)) { Debug.WriteLine("File exists."); } else { Debug.WriteLine("File does not exist."); } ``` Windows10 + Visual Studio 2017 で確認しました。