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を使った業務フレームワーク」カテゴリの記事
- 風景写真 (2011/12/17 9:00)(2011.12.18)
- NET Frameworkアプリケーションを64bit OS上で32bitモードで動かす方法(その2)(2009.05.17)
- NET Frameworkアプリケーションを64bit OS上で32bitモードで動かす方法(2009.05.03)
- 開発前に考えること(2009.01.18)
- 業務フレームワークの目的(2009.01.18)
「ASP.NETサンプル」カテゴリの記事
- ASP.NET(C#)でIEのファイルダウンロードダイアログボタンをカスタマイズ(2009.09.21)
- ASP.NET(C#)でIEのファイルダウンロードダイアログボタンをカスタマイズ(その2)(2010.02.01)
- ASP.NET(C#)でIEのファイルダウンロードダイアログボタンをカスタマイズ(その3)(2010.03.15)
- IE8プロセス間のセッション共有問題と共有解除(2009.10.31)
- ASP.NET(C#)でバイナリファイルをブラウザ表示(2009.07.09)
「C#サンプル」カテゴリの記事
- C#でDIを実装(2009.09.12)
- ASP.NET(C#)でWeb API中継用プロキシサーバを作ってみた(2009.05.24)
- C#でプラグイン実装(2009.09.04)
- C#で共有フォルダ作成/削除(2009.08.30)
- C#でショートカットファイル作成(2009.08.29)
トラックバック
この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/532391/45041318
この記事へのトラックバック一覧です: NET Frameworkアプリケーションを64bit OS上で32bitモードで動かす方法(その2):
« サービスアプリ拡張(「Office→PDF変換」「Officeバージョン変換」の一括変換) | トップページ | サービスアプリ拡張(デュアルマップサービス) »
コメント