特集

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

一色 政彦
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.ノータッチ・デプロイメントのコンテスト開催!
 


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間