バックエンドにアクセスできる Windows アプリケーションを作成しました。問題は、インストール時に、操作を挿入または更新しようとすると、更新可能なクエリを使用する必要があることが表示されることです....この後、アクセスデータベースが存在するフォルダーのアクセス許可を変更しました。インストール先の各コンピューター プログラム ファイルのデータベース フォルダーに対する書き込み権限を変更する必要があります。セットアップの作成時にフォルダーのアクセス許可を設定できる解決策はありますか? またはあなたが知っている他の解決策.....事前に感謝します
2 に答える
データベースをプログラム フォルダーに置かないでください。
Win7 や Vista などの最新のオペレーティング システムでは、このフォルダはセキュリティ上の理由から読み取り専用です。
最適な場所は、 enum で識別されるフォルダーSpecialFolder.ApplicationData
です。
次の方法で物理パスを取得します。
string commonAppData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
このパス内には、アプリケーション専用のパスが必要です。
string myDataPath = Path.Combine(commonAppData, "MyApplicationDataFolder");
このシナリオは、ソフトウェアをインストールしたユーザー以外がアプリケーションを使用しない場合にのみ有効です。データベースへのマルチユーザー アクセスが必要な場合は、各ユーザーがデータベースにアクセスできるローカル ディスクまたはネットワーク共有に自分でフォルダーを作成します。
通常、データベース バックエンドをユーザー マシンまたはネットワーク共有に配置する作業は、インストール ツールに予約されています。数多くのツールが市場に出回っており、無料および有料です。どのツールを使用しているのかわかりませんし、どれもお勧めできません。ただし、いずれかを選択/使用する場合は、次の基本機能の存在を確認する必要があります。
- Windows 環境に存在する特別なフォルダーを参照する機能。(MyDocuments、ApplicationData など...)
- これらの特別なフォルダー (MyApplicationData) にサブフォルダーを作成する機能
- ネットワーク共有を作成するか、既存のものを使用する機能
- 接続文字列を保存する構成ファイルを更新する機能 (文字列の置換)
展開ツールが期待どおりに機能する場合は、アプリケーション内で何もする必要はありません。構成ファイルから接続文字列を読み取り、データベースを開きます。
以下にまったく同じ内容のテキストファイルを作成し、拡張子が「.reg」のファイルを保存します。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Access\Security\Trusted Locations\Location2]
"Path"="C:\\Program Files\\Microsoft Office\\Office12\\ACCWIZ1\\"
"Description"="Access default location: Wizard Databases"
これをダブルクリックして、このレジストリファイルをテストします。レジストリに新しいエントリが作成されます。
インストーラーでregファイルを保存し、インストーラーで実行します。このファイルは、c#コードからも実行できます。