ほとんどのアプリケーションは、データを使用または生成します。 ClickOnce には、ローカルとリモートの両方で、データの読み取りと書き込みに関するさまざまなオプションが用意されています。
ローカル データ
ClickOnce では、次のいずれかの方法を使用して、データをローカルに読み込んで格納できます。
ClickOnce データ ディレクトリ
分離ストレージ
その他のローカル ファイル
ClickOnce データ ディレクトリ
ローカル コンピューターにインストールされているすべての ClickOnce アプリケーションには、ユーザーの [ドキュメントと設定] フォルダーに格納されているデータ ディレクトリがあります。 ClickOnce アプリケーションに含まれていて、"データ" ファイルとしてマークされているファイルは、アプリケーションのインストール時にこのディレクトリにコピーされます。 データ ファイルは、任意の種類のファイルにすることができます。最も頻繁に使用されるファイルは、テキスト、XML、および Microsoft Access .mdb ファイルなどのデータベース ファイルです。
データ ディレクトリは、アプリケーションが明示的に格納および管理するデータである、アプリケーションで管理されるデータを対象としています。 アプリケーション マニフェストで "data" としてマークされていない静的な非ディプ傾向ファイルはすべて、代わりにアプリケーション ディレクトリに存在します。 このディレクトリには、アプリケーションの実行可能ファイル (.exe) ファイルとアセンブリが存在します。
注
ClickOnce アプリケーションがアンインストールされると、そのデータ ディレクトリも削除されます。 ドキュメントなどのエンド ユーザーが管理するデータを格納するためにデータ ディレクトリを使用しないでください。
ClickOnce ディストリビューションのデータ ファイルをマークする
データ ディレクトリ内に既存のファイルを配置するには、ClickOnce アプリケーションのアプリケーション マニフェスト ファイルで、既存のファイルをデータ ファイルとしてマークする必要があります。 詳細については、「 方法: ClickOnce アプリケーションにデータ ファイルを含める」を参照してください。
データ ディレクトリの読み取りと書き込み
データ ディレクトリから読み取るには、ClickOnce アプリケーションが読み取りアクセス許可を要求する必要があります。同様に、ディレクトリへの書き込みには書き込みアクセス許可が必要です。 アプリケーションは、完全信頼で実行するように構成されている場合、このアクセス許可を自動的に持ちます。 アクセス許可の昇格または信頼されたアプリケーションの配置を使用してアプリケーションのアクセス許可を昇格する方法の詳細については、「 ClickOnce アプリケーションをセキュリティで保護する」を参照してください。
注
組織が信頼されたアプリケーションの展開を使用せず、アクセス許可の昇格を無効にした場合、アクセス許可のアサートは失敗します。
アプリケーションは、これらのアクセス許可を持った後、 System.IO内のクラスに対するメソッド呼び出しを使用して Data Directory にアクセスできます。 Windows フォーム ClickOnce アプリケーション内のデータ ディレクトリのパスを取得するには、DataDirectoryのCurrentDeployment プロパティで定義されているApplicationDeploymentプロパティを使用します。 これは、データにアクセスするための最も便利で推奨される方法です。 次のコード例は、展開にデータ ファイルとして含 CSV.txtという名前 のテキスト ファイルに対してこれを行う方法を示しています。
注
ApplicationDeployment名前空間のSystem.Deployment.Application クラスと API は、.NET Core および .NET 5 以降のバージョンではサポートされていません。 .NET 7 では、アプリケーション展開プロパティにアクセスするための新しい方法がサポートされています。 詳細については、「 .NET での ClickOnce 配置プロパティへのアクセス」を参照してください。 .NET 7 では、ApplicationDeployment メソッドと同等のメソッドはサポートされていません。
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 クラスの関連変数を使用して、データ ディレクトリ パスを取得することもできます。
他の種類のファイルを操作するには、追加のアクセス許可が必要になる場合があります。 たとえば、Access データベース (.mdb) ファイルを使用する場合、関連する <xref:System.Data> クラスを使用するには、アプリケーションで完全な信頼をアサートする必要があります。
データ ディレクトリとアプリケーションのバージョン
アプリケーションの各バージョンには、他のバージョンから分離された独自のデータ ディレクトリがあります。 ClickOnce では、配置にデータ ファイルが含まれているかどうかに関係なく、このディレクトリが作成されるため、アプリケーションは実行時に新しいデータ ファイルを作成できます。 アプリケーションの新しいバージョンがインストールされると、ClickOnce は、元の配置に含まれていたか、アプリケーションによって作成されたかに関係なく、以前のバージョンのデータ ディレクトリからすべての既存のデータ ファイルを新しいバージョンのデータ ディレクトリにコピーします。
古いバージョンのアプリケーションでデータ ファイルのハッシュ値が新しいバージョンと異なる場合、ClickOnce は古いバージョンのファイルを新しいバージョンのサーバーに置き換えます。 また、以前のバージョンのアプリケーションで、新しいバージョンの配置に含まれるファイルと同じ名前の新しいファイルが作成された場合、ClickOnce は古いバージョンのファイルを新しいファイルで上書きします。 どちらの場合も、古いファイルは .pre
という名前のデータ ディレクトリ内のサブディレクトリに含まれるため、アプリケーションは移行のために古いデータに引き続きアクセスできます。
データをきめ細かく移行する必要がある場合は、ClickOnce 配置 API を使用して、古いデータ ディレクトリから新しいデータ ディレクトリへのカスタム移行を実行できます。 IsFirstRunを使用して使用可能なダウンロードをテストし、UpdateまたはUpdateAsyncを使用して更新プログラムをダウンロードし、更新が完了した後に独自のカスタム データ移行作業を行う必要があります。
分離ストレージ
Isolated Storage には、単純な API を使用してファイルを作成およびアクセスするための API が用意されています。 保存されたファイルの実際の場所は、開発者とユーザーの両方に表示されません。
分離ストレージは、すべてのバージョンの .NET Framework で動作します。 分離ストレージは、部分的に信頼されたアプリケーションでも動作し、追加のアクセス許可を付与する必要はありません。 アプリケーションを部分信頼で実行する必要があるが、アプリケーション固有のデータを維持する必要がある場合は、Isolated Storage を使用する必要があります。
注
ClickOnce for .NET Core および .NET 5 以降では、コード アクセス セキュリティを必要とする部分信頼はサポートされていません。 .NET Framework では、コード アクセス セキュリティの使用はベスト プラクティスではなく、推奨されません。
詳細については、「 分離ストレージ」を参照してください。
その他のローカル ファイル
アプリケーションでレポート、画像、音楽などのエンドユーザー データを操作または保存する必要がある場合、アプリケーションでは、ローカル ファイル システムへのデータの読み取りと書き込みに FileIOPermission が必要になります。
リモートデータ
ある時点で、アプリケーションは、顧客データや市場情報などのリモート Web サイトから情報を取得する必要があります。 このセクションでは、リモート データを取得するための最も一般的な手法について説明します。
HTTP を使用してファイルにアクセスする
WebClient名前空間の HttpWebRequest または System.Net クラスを使用して、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 サービスの操作 (顧客の取得、注文など) は、プロキシ上のメソッドとして公開されます。 これにより、Web サービスは生のテキストファイルや XML ファイルよりもはるかに簡単に使用できます。
XML Web サービスが HTTP 経由で動作する場合、サービスは、 WebClient クラスおよび HttpWebRequest クラスと同じセキュリティ制限によって制限されます。
データベースに直接アクセスする
System.Data名前空間内のクラスを使用して、ネットワーク上の SQL Server などのデータベース サーバーとの直接接続を確立できますが、セキュリティの問題を考慮する必要があります。 HTTP 要求とは異なり、データベース接続要求は、部分信頼では常に既定で禁止されます。既定では、CD-ROM から ClickOnce アプリケーションをインストールする場合にのみ、このようなアクセス許可が付与されます。 これにより、アプリケーションの完全な信頼が得られます。 特定の SQL Server データベースへのアクセスを有効にするには、アプリケーションがそれに SqlClientPermission を要求する必要があります。SQL Server 以外のデータベースへのアクセスを有効にするには、 OleDbPermissionを要求する必要があります。
ほとんどの場合、データベースに直接アクセスする必要はありませんが、代わりに、ASP.NET または XML Web サービスで記述された Web サーバー アプリケーションを介してデータベースにアクセスします。 ClickOnce アプリケーションが Web サーバーから配置されている場合、この方法でデータベースにアクセスするのが最適な方法です。 アプリケーションのアクセス許可を昇格することなく、部分信頼でサーバーにアクセスできます。