仮想化技術

Hyper-vを利用するにはVT-xとSLATが必要。SLATは
インテル® バーチャライゼーション・テクノロジーについて
のEPTにあたる。

VirtualBoxなどで64bitOSを利用するにはVT-xが必要

Disk2vhdツールで物理ディスク環境をVHDファイルに変換する

稼働中のマシンのHDDから、VMware Player用の仮想マシンを作る
PartImageでHDDをダンプする

利用中のPCを丸ごとVMware形式の仮想マシンへ変換「VMware vCenter Converter」

VMware/Hyper-Vの仮想ディスクを相互変換可能なフリーソフト【StarWind V2V Converter】
VHD to VMDK

vmware playerで既存のパーティションを起動する
VMware raw disk

VMware の仮想ディスクを物理ディスク構成に変更する方法
仮想マシンからローカルディスクに直接アクセスする

既にインストール済みのWindows 98をVMwareで使うには
IDEディスクを直接「rawディスクパーティション」として利用する

【参考】VMwareのディスクイメージをさくらのクラウドで利用する

VHD(仮想ハードディスク)をWindows7/Windows8/Windows Serverに直接マウントする方法

壊れたWindows PC(HDDは無事)のHDDを新マシン上のVMWareで仮想化して起動する

XPの物理PC実行環境を仮想マシンとして保存

VirtualBoxを使った仮想Linuxサーバのローカル開発環境構築

Remote App for Hyper-V (XP)

ASP.net 操作ログ採取 TableAdapter拡張 改良版

○TableAdapterの基底クラスを作成

using System.ComponentModel;
using System.Data.SqlClient;
using System.Reflection;
using System.Web;
using System;

namespace Logic.dataset
{
    public class TableAdapterBase : Component
    {
        public SqlDataAdapter InnerAdapter
        {
            get
            {
                return (SqlDataAdapter)GetType().GetProperty("Adapter",
                  BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this, null);
            }
        }

        static public event SqlRowUpdatedEventHandler sqlRowUpdatedEvent = delegate { };
        static public event SqlRowUpdatingEventHandler sqlRowUpdatingEvent = delegate { };

        public TableAdapterBase() : base()
        {
            InnerAdapter.RowUpdated += rowUpdatedEventHandler;
            InnerAdapter.RowUpdating += rowUpdatingEventHandler;
        }

        private void rowUpdatedEventHandler(object sender, SqlRowUpdatedEventArgs e)
        {
            sqlRowUpdatedEvent(sender, e);
        }

        private void rowUpdatingEventHandler(object sender, SqlRowUpdatingEventArgs e)
        {
            sqlRowUpdatingEvent(sender, e);
        }    
    }
}

○TableAdapterの基底クラスを変更

○イベントを設定

・Page_Load部
  Logic.dataset.TableAdapterBase.sqlRowUpdatedEvent += putLogSqlRowUpdatedHandler;

・Page_Unload部
  Logic.dataset.TableAdapterBase.sqlRowUpdatedEvent -= putLogSqlRowUpdatedHandler;


        private static void putLogSqlRowUpdatedHandler(object sender, System.Data.SqlClient.SqlRowUpdatedEventArgs e)
        {
            putLog(e.Row);
        }

        private static void putLogSqlRowUpdatingHandler(object sender, System.Data.SqlClient.SqlRowUpdatingEventArgs e)
        {
            //putLog(e.Row);
        }

※dt.Update()系は拾えるが、dt.Delete()系はダメ。Update()でDeleteしていたら拾える?
 SqlDataAdapterはsealedの為、拡張できない。。。

ASP.net 操作ログ採取 DataTable

using System.Reflection;
namespace Logic.dataset {
    public delegate void LogEventHandler(object sender, EventArgs e);
    public partial class data_〇〇 {
        partial class ○○DataTable
        {
            static public event LogEventHandler logEvent = delegate { };
            public void myGetData()                
            {
                //イベント発生
                logEvent(this, EventArgs.Empty);
   :
   :


namespace myApp
{
    public class baseBasePage : System.Web.UI.Page
    {
        protected override void OnInit(EventArgs e)
        {
            //イベント追加
            Logic.dataset.data_〇〇.〇〇DataTable.logEvent += putLogHandler;
            base.OnInit(e);
        }

        protected override void OnUnload(EventArgs e)
        {
            //イベント削除
            Logic.dataset.data_〇〇.〇〇DataTable.logEvent -= putLogHandler;
            base.OnUnload(e);
        }
   :
   :