ClickOnce アプリケーションにおけるローカル データおよびリモート データへのアクセス
ほとんどのアプリケーションはデータを使用または作成します。 ClickOnce には、データをローカルまたはリモートで読み書きするための各種のオプションがあります。
ローカル データ
ClickOnce では、次のような方法を使用してデータを読み込んでローカルに格納できます。
ClickOnce データ ディレクトリ
分離ストレージ
その他のローカル ファイル
ClickOnce データ ディレクトリ
ローカル コンピューターにインストールされている各 ClickOnce アプリケーションには、データ ディレクトリがあります。データ ディレクトリは、ユーザーの Documents and Settings フォルダーにあります。 ClickOnce アプリケーションに含まれていて、"データ" ファイルとしてマークされている各ファイルは、アプリケーションのインストール時にこのディレクトリにコピーされます。 どのような種類のファイルでもデータ ファイルとして指定できます。最もよく使用されるのは、テキスト ファイルや XML ファイル以外にも、Microsoft Access の .mdb ファイルなどのデータベース ファイルです。
データ ディレクトリは、アプリケーションで管理するデータ、つまり、アプリケーションによって明示的に格納および保守されるデータ用のディレクトリです。 アプリケーション マニフェストで "データ" のマークが付けられていない静的で非依存のすべてのファイルはアプリケーション ディレクトリに格納されます。 このディレクトリには、アプリケーションの実行可能ファイル (.exe) とアセンブリがあります。
注意
ClickOnce アプリケーションをアンインストールすると、そのデータ ディレクトリも削除されます。文書ファイルなど、エンド ユーザーが管理するデータを格納するためには、データ ディレクトリを使用しないでください。
ClickOnce で配布するデータ ファイルのマーキング
既存のファイルをデータ ディレクトリに格納するには、そのファイルを ClickOnce アプリケーションのアプリケーション マニフェスト ファイルでデータ ファイルとしてマークする必要があります。 詳細については、「方法 : ClickOnce アプリケーションにデータ ファイルを含める」を参照してください。
データ ディレクトリからの読み取りとデータ ディレクトリへの書き込み
データ ディレクトリからデータを読み込むには、ClickOnce アプリケーションに読み取りのアクセス許可があることが必要です。同様に、データ ディレクトリにデータを書き込むには、書き込みのアクセス許可が必要です。 完全な信頼で実行するようにアプリケーションが設定されている場合、これらのアクセス許可は自動的にアプリケーションに与えられます。 アクセス許可の昇格機能または信頼されたアプリケーションの配置を使用してアプリケーションのアクセス許可を昇格させる方法の詳細については、「ClickOnce アプリケーションのセキュリティ」を参照してください。
注意
組織が信頼されたアプリケーションの配置を使用しておらず、アクセス許可の昇格機能が無効にされている場合は、アクセス許可の要求は失敗します。
アプリケーションにこれらのアクセス許可が与えられると、アプリケーションは System.IO に属する各クラスのメソッドを呼び出すことによって、データ ディレクトリにアクセスできます。 ApplicationDeployment の CurrentDeployment プロパティで定義された DataDirectory プロパティを使用することで、Windows フォーム ClickOnce アプリケーション内のデータ ディレクトリのパスを取得できます。 これは、データにアクセスする最も簡単な方法として推奨されています。 次のコード例では、配置にデータ ファイルとして組み込んだ CSV.txt というテキスト ファイルに対してこの操作を行う方法を示します。
If (ApplicationDeployment.IsNetworkDeployed) Then
Dim SR As StreamReader = Nothing
Try
SR = New StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory & "\CSV.txt")
MessageBox.Show(SR.ReadToEnd())
Catch Ex As Exception
MessageBox.Show("Could not read file.")
Finally
SR.Close()
End Try
End If
if (ApplicationDeployment.IsNetworkDeployed)
{
try
{
using (StreamReader sr = new StreamReader(ApplicationDeployment.CurrentDeployment.DataDirectory + @"\CSV.txt"))
{
MessageBox.Show(sr.ReadToEnd());
}
}
catch (Exception ex)
{
MessageBox.Show("Could not read file. Error message: " + ex.Message);
}
}
配置内のファイルをデータ ファイルとしてマークする方法の詳細については、「方法 : ClickOnce アプリケーションにデータ ファイルを含める」を参照してください。
Application クラスにある LocalUserAppDataPath など、関連する変数を使用してデータ ディレクトリのパスを取得することもできます。
他の種類のファイルを扱うには、アクセス許可の追加が必要になる場合があります。 たとえば、Microsoft Access データベース (.mdb) ファイルを使用するには、関連する System.Data クラスを使用するために、アプリケーションに完全な信頼を与える必要があります。
データ ディレクトリおよびアプリケーションのバージョン
アプリケーションの各バージョンは、それぞれ別のデータ ディレクトリに格納されます。 ClickOnce では、配置にデータ ファイルが含まれていない場合でも、アプリケーションが実行時にデータ ファイルを新規作成する場所として使用できるように、このデータ ディレクトリが作成されます。 アプリケーションの新しいバージョンをインストールすると、ClickOnce は、前のバージョンのデータ ディレクトリから新しいバージョンのデータ ディレクトリに、既存のデータ ファイルをすべてコピーします。このとき、そのデータ ファイルが配置時に作成されたデータ ファイルであるか、アプリケーションによって作成されたデータ ファイルであるかは区別されません。
データ ファイルのハッシュ値がアプリケーションの古いバージョンと新しいバージョンとで異なる場合、ClickOnce は、古いバージョンのファイルをサーバーにある新しいバージョンのファイルで置き換えます。 また、以前のバージョンのアプリケーションで作成されたファイルの名前が、新しいバージョンの配置に含まれているファイルと同じ名前の場合、ClickOnce は、古いバージョンのファイルを新しいファイルで上書きします。 いずれの場合にも、古いファイルはデータ ディレクトリの .pre サブディレクトリに保存されるため、アプリケーションは移行時にそれらのデータにアクセスできます。
データをより細かく移行する場合は、ClickOnce Deployment API を使用して古いデータ ディレクトリから新しいデータ ディレクトリへのカスタム移行を実行できます。 利用可能なダウンロードは IsFirstRun を使用してテストし、Update または UpdateAsync を使用して更新プログラムをダウンロードし、更新が完了した後に各自のカスタム データ移行タスクを実行する必要があります。
分離ストレージ
分離ストレージには、簡単な操作でファイルを作成したりアクセスしたりできる API が用意されています。 格納したファイルの実際の場所は、開発者からもユーザーからも隠されます。
分離ストレージは、.NET Framework のすべてのバージョンで動作します。 分離ストレージは、アクセス許可を追加せずに部分信頼アプリケーションでも動作します。 アプリケーションを部分信頼で実行する必要があるが、アプリケーション固有のデータを保守する必要がある場合は、分離ストレージを使用します。
詳細については、「分離ストレージ」を参照してください。
その他のローカル ファイル
アプリケーションでレポート、画像、音楽などのエンド ユーザー データを使用し、保存する必要がある場合には、FileIOPermission を使用してローカル ファイル システムに対するデータの読み込みや書き込みを行う必要があります。
リモート データ
アプリケーションでは、実行時に、顧客データ、市場情報などの情報をリモートの Web サイトから取得する必要が生じることがあります。 このセクションでは、リモート データを取得するための最も一般的な方法について説明します。
HTTP によるファイル アクセス
System.Net 名前空間にある WebClient クラスまたは HttpWebRequest クラスを使用すると、Web サーバー上のデータにアクセスできます。 アクセスできるデータは、静的ファイル、または、生のテキストまたは XML データを返す ASP.NET アプリケーションです。 データが XML 形式の場合には、XmlDocument クラスを使用してデータを取得すると最も高速です。このクラスの Load メソッドには引数として URL を渡します。 例については、「XML ドキュメントの DOM への読み取り」を参照してください。
アプリケーションが HTTP 経由でリモート データにアクセスする場合は、セキュリティを考慮する必要があります。 既定では、ClickOnce アプリケーションによるネットワーク リソースへのアクセスは、アプリケーションの配置方法に従って制限されている場合があります。 この制限は、悪意のあるプログラムが特権の必要なリモート データにアクセスしたり、ユーザーのコンピューターを使用して、ネットワーク上の別のコンピューターを攻撃したりできなくする目的で行われます。
次の表は、採用できる配置の方法およびその既定の Web アクセス許可の一覧です。
配置の種類 |
既定のネットワーク アクセス許可 |
---|---|
Web インストール |
アプリケーションのインストール元の Web サーバーだけにアクセスできます |
ファイル共有インストール |
どの Web サーバーにもアクセスできません |
CD-ROM インストール |
任意の Web サーバーにアクセスできます |
ClickOnce アプリケーションがセキュリティ上の制限によって Web サーバーにアクセスできない場合には、アプリケーションから対象の Web サイトに WebPermission を要求する必要があります。 ClickOnce アプリケーションに、より高いセキュリティ アクセス許可を与える方法の詳細については、「ClickOnce アプリケーションのセキュリティ」を参照してください。
XML Web サービス経由でのデータ アクセス
XML Web サービスとしてデータを公開すると、XML Web サービス プロキシを使用してデータにアクセスできます。 このプロキシは、どちらかの Visual Studio を使用して作成した .NET Framework クラスです。 顧客の検索、注文の発注など、XML Web サービスを使用して行う操作は、XML Web サービス プロキシのメソッドとして公開されます。 このため Web サービスは生のテキストや XML ファイルより簡単に使用できます。
HTTP 経由で動作する XML Web サービスは、WebClient クラスおよび HttpWebRequest クラスと同じセキュリティ制限によってバインドされます。
このタスクは、Visual Studio を使用して実行することもできます。 方法 : リモート Web 参照を追加および削除する
方法 : リモート Web 参照を追加および削除する
方法 : リモート Web 参照を追加および削除する
データベース ディレクトリへのアクセス
System.Data 名前空間にあるクラスを使用すると、SQL Server などネットワーク上のデータベース サーバーとの直接接続を確立できますが、セキュリティ事項を考慮する必要があります。 HTTP 要求とは異なり、部分信頼の場合、データベース接続要求は既定で常に禁止されています。ClickOnce アプリケーションを CD-ROM からインストールする場合にだけ、既定でデータベース接続のアクセス許可を得ることができます。 これによって、アプリケーションには完全信頼が与えられます。 特定の SQL Server データベースへのアクセスを有効にするには、アプリケーションからデータベースに対して SqlClientPermission を要求する必要があります。SQL Server 以外のデータベースへのアクセスを有効にするには、OleDbPermission を要求する必要があります。
通常は、データベースに直接アクセスする必要はありません。代わりに、ASP.NET で記述された Web サーバー アプリケーションまたは XML Web サービスを経由してデータベースにアクセスします。 Web サーバーから ClickOnce アプリケーションを配置する場合、一般にこの方法でデータベースにアクセスするのが最良の方法です。 アプリケーションのアクセス許可を昇格せずに部分信頼のサーバーにアクセスできます。