最近のトラックバック

2015年5月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

Google AdSense2

« サービスアプリ拡張(「Office→PDF変換」「Officeバージョン変換」の一括変換) | トップページ | サービスアプリ拡張(デュアルマップサービス) »

NET Frameworkアプリケーションを64bit OS上で32bitモードで動かす方法(その2)

.NET Frameworkアプリケーションを64bit OS上で32bitモードで動かす方法の紹介。



■最初に
前回はWindowsアプリケーションとASP.NETを32bitアプリケーションとして動かすための設定を書いてみた。
しかし心情としては、例えライブラリが32ビットにしか対応していなくても64ビットOS上では64ビットアプリケーションで動かしたいのが本音だと思う。
今回は折衷案として以下の方式を考えてみた。

①64bitで動く部分は64bitアプリケーションとして作成する。
②32bitしか対応していないライブラリ(dll,ActiveX等)を利用した処理を切り出し、32ビットアプリケーションとして作成する。
③64bitアプリケーションから32bitアプリケーションをプロセス起動する。処理に必要な値はコマンドライン引数かファイルで渡す。

なお本ページの環境構成は以下の通り。
・Windows Server 2008 64bit
・Visual Studio 2008
・.NET Framework 3.5 SP1



■32ビットアプリケーション作成サンプル
まず32ビットアプリケーションの作成だ。

手順1
新規プロジェクトを「コンソールアプリケーション」として作成。
プロジェクト名はとりあえず「proc32」とする。


手順2
コマンドライン引数を取得するコードを記述する。
※このサンプルではMessageBox.Show()を利用するためプロジェクト参照から「System.Windows.Forms」を追加している。


using System;
using System.Windows.Forms;

class CProc32
{
    static void Main(string[] args)
    {
        if (args.Length > 0)
        {
            MessageBox.Show(args[0]);
        }
    }
}


手順3
プロジェクトのプロパティから「出力の種類」を"Windowsアプリケーション"に設定。


手順4
「ビルド」タブを選択し、「プラットフォーム ターゲット」を"x86"に設定する。


■ASP.NET32ビットプリケーションを64ビットアプリケーションから起動サンプル
今度は64bitアプリケーションの作成だ。
「プラットフォーム ターゲット」の既定値は"Any CPU"のためOSに合わせてアプリケーション動作を32ビット・64ビットに切り替えるが、今回は強制的に64bitアプリとして作成する。

手順1
新規プロジェクトを「Windows フォーム アプリケーション」を作成。
プロジェクト名はとりあえず「Win64」とする。


手順2
フォームにボタンを作成し、ボタンイベントに以下のソースを記述。
ポイントは「Process.StartInfo.WindowStyleプロパティ」と「Process.WaitForExit()メソッド」だ。


using System;
using System.Diagnostics;
using System.Windows.Forms;

namespace Win64
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// [32bitアプリを起動]ボタン押下
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button1_Click(object sender, EventArgs e)
        {
            //-------------------------------------------------------------------------------------
            // 32bitアプリを起動
            //-------------------------------------------------------------------------------------
            Process ps = new Process();
            // プロセス起動引数設定
            ps.StartInfo.FileName = "proc32.exe";
            ps.StartInfo.Arguments = "\"ビット64アプリからから32ビットアプリを起動しました。\"";
            // プロセルのウィンドウは非表示
            ps.StartInfo.WindowStyle =ProcessWindowStyle.Hidden;
            // プロセス起動
            ps.Start();
            // プロセスが終了するまで最大10秒(=10 * 1000ミリ秒)待機
            ps.WaitForExit(10 * 1000);
            //-------------------------------------------------------------------------------------
            // 終了メッセージ
            //-------------------------------------------------------------------------------------
            MessageBox.Show("ボタン処理が終了");
        }
    }
}


手順3
プロジェクトのプロパティから「プラットフォーム ターゲット」を"x64"に設定する。


手順4
先の手順で作成した「proc32.exe」を「Win64.exe」と同じフォルダに配置。


手順5
「Win64.exe」を起動しボタンを押すと「proc32.exe」内のMessagBox処理が呼び出される。


手順6
このときのタスクマネジャーは以下の通りだ。



■関連ページ


« サービスアプリ拡張(「Office→PDF変換」「Officeバージョン変換」の一括変換) | トップページ | サービスアプリ拡張(デュアルマップサービス) »

ASP.NETを使った業務フレームワーク」カテゴリの記事

ASP.NETサンプル」カテゴリの記事

C#サンプル」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/532391/45041318

この記事へのトラックバック一覧です: NET Frameworkアプリケーションを64bit OS上で32bitモードで動かす方法(その2):

« サービスアプリ拡張(「Office→PDF変換」「Officeバージョン変換」の一括変換) | トップページ | サービスアプリ拡張(デュアルマップサービス) »

Google AdSense


  • ---

Amazon ウィジェット

  • ウィジェット

@niyo_naのツイート

無料ブログはココログ

Google Analytics