特集

ノータッチ・デプロイメント

一色 政彦
2003/08/12


 ただし、「ファイルを開く」コモン・ダイアログでもファイルI/Oに関する処理は認められていないので、ファイル名やファイル・パスを処理しようとするとセキュリティ・エラーが発生する。これにより、ユーザーのみがファイルを操作でき、プログラム側ではファイル操作やファイル情報の取得が全くできないようになっている。よって、次のような、ファイル名の取得やファイル操作は行うことができない。

' Visual Basic .NET
Dim dlg As New OpenFileDialog()
dlg.Title = "テキストファイルを開く"
dlg.Filter = "テキスト ファイル (*.txt)|*.txt|すべてのファイル (*.*)|*.*"
If dlg.ShowDialog() = DialogResult.OK Then
  Dim srtPath As String =  dlg.FileName
End If
インターネット・ゾーンでセキュリティ例外が発生するサンプル・プログラム(Visual Basic .NET版)
 
// C#
OpenFileDialog dlg = new OpenFileDialog();
dlg.Title = "テキストファイルを開く";
dlg.Filter = "テキスト ファイル (*.txt)|*.txt|すべてのファイル (*.*)|*.*";
if (dlg.ShowDialog() == DialogResult.OK)
{
  string srtPath = dlg.FileName;
}
インターネット・ゾーンでセキュリティ例外が発生するコード(C#版)
赤字でセキュリティ例外が発生する。
OpenFileDialog.TitleプロパティとOpenFileDialog.FileNameプロパティは、ファイルI/Oのパーミッションで制限されている。

■設定情報を保存するには

 ノータッチ・デプロイメントでは、レジストリも利用することができない。よって、アプリケーションの設定情報などはレジストリに保存することができない。しかし、これにもまた、逃げ道が用意されている。それは、「分離ストレージ内のファイル(Isolated Storage File)」を利用する方法だ。分離ストレージとはローカル・ディスク上に作成される仮想的なストレージで、.NET Frameworkのセキュリティ機構に守られている。ただし、分離ストレージ内のファイルもいくつかの制限がある。使用できるファイルの領域は、ユーザー、ドメイン、アセンブリの順に細かく分離され、ほかのアプリケーション間だけでなく、ドメイン間、ユーザー間でも設定情報を共有することができない。しかも、使用できる領域のサイズは10240Bytesしかない。次のサンプル・プログラムは分離ストレージ内のファイルの利用例だ。

' Visual Basic .NET
Imports System.IO
Imports System.IO.IsolatedStorage
Dim isoFile As IsolatedStorageFile = IsolatedStorageFile.GetUserStoreForDomain()
Dim isoStream As New IsolatedStorageFileStream( _
    "isofile.text", _
    FileMode.CreateNew, _
    FileAccess.Write, _
    isoFile)
Dim writer As New StreamWriter(isoStream)
writer.WriteLine("設定データ1")
writer.WriteLine("設定データ2")
isoFile.Dispose()
isoFile.Close()
分離ストレージ内のファイルのサンプル・プログラム(Visual Basic .NET版)
 
// C#
using System.IO;
using System.IO.IsolatedStorage;
IsolatedStorageFile isoFile =  IsolatedStorageFile.GetUserStoreForDomain();
IsolatedStorageFileStream isoStream =
  new IsolatedStorageFileStream(
    "isofile.text",
    FileMode.CreateNew,
    FileAccess.Write,
    isoFile);
StreamWriter writer = new StreamWriter(isoStream);
writer.WriteLine("設定データ1");
writer.WriteLine("設定データ2");
isoFile.Dispose();
isoFile.Close();
分離ストレージ内のファイルのサンプル・プログラム(C#版)

ノータッチ・デプロイメントのプログラミング(2)

 インターネット・ゾーンでは、ファイルやデータベースは利用できない。さらに、Webサービスも基本的に利用できないのだが、コードが配置されたサイトと同一サイトのWebサービスに限り使うことができる。これは、NetCodeGroupポリシーの「同一サイトへのWebアクセス許可」によるものである。これにより、Webサービス経由でデータベースを利用することが可能になる。もちろん、Webサービスだけでなく、HTTPなどでWebアクセスして、サーバ上にあるファイルを読み込むことが可能だ。サーバ側に検索用のデータ・ファイルを置いてノータッチ・デプロイメントされたクライアントから参照するといった使い方も考えられるだろう。ただし、ファイルI/Oの例外を避けるために、ストリームを使って読み出す必要がある。次のサンプル・プログラムはHTTP経由でWeb上のファイルにアクセスしてファイル読み込みを行う処理の実装例だ。

' Visual Basic .NET
Imports System.Net
Dim webreq As WebRequest = HttpWebRequest.Create(e.Link.LinkData.ToString())
Dim webres As WebResponse = req.GetResponse()
Dim resstream As Stream = res.GetResponseStream()
Dim textReader As New StreamReader(stream, System.Text.Encoding.Default)
・・・・・・
textReader.Close()
resstream.Close()
webres.Close()
同一サイトへのWebアクセスのサンプル・プログラム(Visual Basic .NET版)
 
// C#
using System.Net;
WebRequest webreq = HttpWebRequest.Create(e.Link.LinkData.ToString());
WebResponse webres = req.GetResponse();
Stream resstream = res.GetResponseStream();
StreamReader textReader = new StreamReader(stream, System.Text.Encoding.Default);
・・・・・・
textReader.Close()
resstream.Close()
webres.Close()
同一サイトへのWebアクセスのサンプル・プログラム(C#版)

■ほかのアプリケーションへのデータ転送方法

 ノータッチ・デプロイメントではファイルやCOMなどを利用できないので、アプリケーション間でのデータのやり取りを行うことが難しい。ほかのアプリケーションにデータを渡すには、「クリップボード経由でデータをコピーする」という方法が考えられる。

 インターネット・ゾーンのセキュリティでは、クリップボードからのデータ取得は禁じられているが、データ設定は許可されているので、クリップボードを利用したほかのアプリケーションへのデータのコピーは実現可能である。Clipboard.SetDataObjectメソッドを利用して、クリップボードにデータをコピーすると、ユーザーはほかのアプリケーションでデータの「貼り付け」ができる。なお、ほかのアプリケーションからデータを受けるにはファイル・ダイアログを利用して、ファイル経由でデータを取得するのがよいだろう。


 INDEX
  [特集]ノータッチ・デプロイメント
     1.ノータッチ・デプロイメントとは何か
     2. .NETアセンブリのコード・アクセス・セキュリティ
     3.インターネット・ゾーンのセキュリティ・ポリシー
     4.ノータッチ・デプロイメントのプログラミング(1)
   5.ノータッチ・デプロイメントのプログラミング(2)
     6.ノータッチ・デプロイメントのコンテスト開催!
 

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • Kinectが切り開く“夢の近未来” (2012/2/2)
     日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか?
  • 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
     アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する
  • SQL Azure Data Sync入門 (2012/1/30)
     SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説
  • Windows Phoneアプリ市場の現状を分析する (2012/1/27)
     Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH