特集

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

一色 政彦
2003/08/12


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

 ノータッチ・デプロイメントで実行するプログラムは、インターネット・ゾーンのコード・アクセス・セキュリティでアクセス許可された機能しか使うことができない。ここでは、インターネット・ゾーンでアクセス許可された機能を活用したプログラミングについて概説しよう。サンプル・プログラムのソース・コードは下記のリンクからダウンロードできる。

 ただし、Visual Studio .NET 2002では、本稿の冒頭でも紹介したように、.NET Framework 1.0 SP1/SP2が導入されている場合、デフォルト設定のままでは動作しないので、注意が必要である。

■安全なウィンドウのコーディング

 ノータッチ・デプロイメントはWindowsフォームを使ったWebアプリケーションなので、基本的なWindowsフォームのウィンドウ機能が利用可能だ。インターネット・ゾーンのコード・アクセス・セキュリティでは、ウィンドウに対し「SafeTopLevelWindows(安全なトップ・レベル・ウィドウ)」の制限がかけられる。

 このSafeTopLevelWindowsでは、ControlBoxプロパティ(タイトルバー右上の最大化、最小化ボタン)が制限され、またShowInTaskbarプロパティ(フォームのタスクバー表示)が制限される。これにより、バックグラウンドで悪意のあるプログラムが実行されるのを防ぎ、またシステムのログオン画面やデスクトップに偽装してパスワードを盗むなどのなりすまし攻撃を防止できる。

マイコンピュータ・ゾーンの場合
インターネット・ゾーンの場合
SafeTopLevelWindowsのセキュリティ制限
インターネット・ゾーンでは、セキュリティ制限によりウィンドウの一部が制限される。
  マイコンピュータ・ゾーンでは、コントロール・ボックスの最大、最小ボタンを隠すことができるが、インターネット・ゾーンでは隠すことができない。
  同様に、インターネット・ゾーンでは、タスクバーのアプリケーション表示を無効にできない。

 SafeTopLevelWindowsで、処理制限される機能は次のとおりだ。この情報は.NET Framework 1.1 SDKの「Windows フォームのセキュリティに関するその他の考慮事項(ms-help://MS.NETFrameworkSDKv1.1.JA/cpguidenf/html
/cpconAdditionalSecurityConsiderationsInWindowsForms.htm
)」などで参照することができる。

アプリケーション ・SafeTopLevelCaptionFormatプロパティ(設定)
Form ・ActiveFormプロパティ(取得)、MdiParentプロパティ(取得)
・ControlBoxプロパティ(設定)、ShowInTaskbarプロパティ(設定)、TopMostプロパティ(設定)
・Opacityプロパティ(50%より小さい値の設定)
・WindowStateプロパティ(プログラムによるFormWindowState.Minimizedへの設定)
・Activateメソッド
・FormBorderStyle列挙体(None、FixedToolWindow、SizableToolWindow)
コントロール ・Parentプロパティ(取得)
・Regionプロパティ(設定)
・FindFormメソッド、Focusメソッド、FromChildHandleメソッド、FromHandleメソッド、PreProcessMessageメソッド、ReflectMessageメソッド、SetTopLevelメソッド
・GetChildAtPointメソッド(本メソッドの戻り値のコントロールが、メソッド呼び出し元コントロールの子ではない場合)
DataGrid ・ProcessTabKeyメソッド
Cursor ・Clipプロパティ(設定)
・Hideメソッド
コンテナ ・コントロール内でのフォーカス移動
NotifyIcon ・完全に制限される
SafeTopLevelWindowsのセキュリティにより制限される機能

■ファイルを扱うテクニック

 次にファイルの操作について見てみよう。インターネット・ゾーンでのファイルI/O(入出力)は完全に制限されている。よって、ファイルにデータを書き込んだり、ファイルからデータを読み込んだりすることは不可能である。ただし、ファイル読み込みに関しては1つだけ抜け道がある。それは、「ファイルを開く」コモン・ダイアログを使ったファイル読み込みだ。次のコードは、「ファイルを開く」コモン・ダイアログを使ったファイル読み込みのサンプル・コードである。

' Visual Basic .NET
Dim dlg As New OpenFileDialog()
dlg.Filter = "テキスト ファイル (*.txt)|*.txt|すべてのファイル (*.*)|*.*"
If dlg.ShowDialog() = DialogResult.OK Then
  Dim filestream As Stream =  dlg.OpenFile()
  Dim reader As New StreamReader(filestream)
  Dim strtemp As String =  reader.ReadLine()
  reader.Close()
  filestream.Close()
End If
「ファイルを開く」コモン・ダイアログを利用したファイル読み込みのサンプル・プログラム(Visual Basic .NET版)

// C#
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "テキスト ファイル (*.txt)|*.txt|すべてのファイル (*.*)|*.*";
if (dlg.ShowDialog() == DialogResult.OK)
{
  Stream filestream = dlg.OpenFile();
  StreamReader reader = new StreamReader(filestream);
  string strtemp = reader.ReadLine();
  reader.Close();
  filestream.Close();
}
「ファイルを開く」コモン・ダイアログを利用したファイル読み込みのサンプル・プログラム(C#版)
 

 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 記事ランキング

本日 月間