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バージョン変換」の一括変換) | トップページ | サービスアプリ拡張(デュアルマップサービス) »
コメント