/// <summary>
        /// プロセスでシステムを起動させる。
        /// </summary>
        /// <param name="clrVersion">CLRのバージョン</param>
        /// <param name="assemblyStep">踏み台アセンブリへのパス</param>
        /// <param name="processId">プロセスID。</param>
        /// <param name="initializeThreadWindowHandle">初期化を実行させるスレッドに属するウィンドウのハンドル。</param>
        /// <param name="start">開始処理</param>
        /// <returns>システムコントローラー。</returns>
        static SystemController StartInApp(string clrVersion, string assemblyStep, int processId, IntPtr initializeThreadWindowHandle, ExecuteStart start)
        {
            SystemStartResponseReciever reciever = new SystemStartResponseReciever();
            IntPtr recieveWindowHandle           = reciever.Start(processId);

            //開始
            start(CreateStartupInfo(clrVersion, assemblyStep, recieveWindowHandle, initializeThreadWindowHandle));

            //受信スレッドの終了待ち(返信待ち)
            long   errNo = 0;
            IntPtr systemControlWindowInAppHandle = reciever.WaitForCompletion(ref errNo);

            //nullなら失敗
            if (systemControlWindowInAppHandle == IntPtr.Zero)
            {
                switch (errNo)
                {
                case ERR_UNPREDICATABLE_CLR_VERSION:
                    throw new FriendlyOperationException(ResourcesLocal.Instance.ErrorUnpredicatableClrVersion);

                default:
                    throw new FriendlyOperationException(ResourcesLocal.Instance.ErrorProcessAcess);
                }
            }

            //システムコントロールウィンドウのハンドルを返す
            Debug.Trace("InitializeFriendly Success.");
            return(new SystemController(systemControlWindowInAppHandle));
        }
 /// <summary>
 /// デフォルト以外のAppDomainで起動。
 /// </summary>
 /// <param name="processId">プロセスID。</param>
 /// <param name="initializeThreadWindowHandle">初期化を実行させるスレッドに属するウィンドウのハンドル。</param>
 /// <param name="start">開始処理</param>
 /// <returns>システムコントローラー。</returns>
 internal static SystemController StartInOtherAppDomain(int processId, IntPtr initializeThreadWindowHandle, ExecuteStart start)
 {
     return(StartInApp("nouse", "nouse", processId, initializeThreadWindowHandle, start));
 }