こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

実行体を別のマシンで実行させたい

Windows Vistaマシン(PC)にインストールしたVisual Studio 2005でVC++により作製した実行体を、素の(Visual Studio 2005がインストールされていない)Windows XPマシン(PC)で、実行させたく存じます。

まず、Windows VistaマシンおよびインストールされているOSの詳細は、下記の通りです。

PC:プロセッサ  →Intel Core2 Duo CPU T7250 @ 2GHz
  メモリ    →2GB
  システムの種類→32bit OS
OS:Windows Vista Home Premium SP2


次に、インストールしたVisual Studio 2005の詳細は、下記の通りです。

Visual Studio 2005:Version8.0.50727.867(vsvista.050727-8600)
.NET FRAMEWORK :Version2.0.50727 SP2


次に、Windows XPマシンおよびインストールされているOSの詳細は、下記の通りです。

PC:プロセッサ  →Intel Celeron M processor @ 1.3GHz
  メモリ    →512MB
  システムの種類→32bit OS
OS:Windows XP Home Version2002 SP3


次に、作製した実行体は、Visual C++ プロジェクトから「MFCアプリケーション」を選択し、Vistaマシン上でダブルクリックで実行するとウィンドウが発生し、ウィンドウ内には、ボタンが1つおよび入力テキストが1つ存在して「テキスト入力してOKならば、OKボタンを押下する」程度の簡単なプログラムをリンクしたものです。以下の要領でXPマシン側に実行体を移動し、実行体をダブルクリックで実行させようとしたのですが、いずれも「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決することがあります。」というダイアログが出現し、実行に失敗しました。以下、この実行体名を「text_input.exe」と称して失敗例を記述します。

1.「text_input.exe」をそのままXPマシンのROOTの直下に置いて実行した → NG
2.XPマシンに、
  ・Microsoft .NET Framework Version 2.0 再頒布可能パッケージ (x86)
  ・Microsoft .NET Framework 2.0 日本語 Language Pack (x86)
  ・Microsoft Visual C++ 2005 再頒布可能パッケージ (x86)
 をインストールした後、「text_input.exe」をXPマシンのROOTの直下に置いて実行した → NG
3.「text_input.exe」を作製する際、「stdafx.h」内で、#pragma宣言をして下記のファイルもリンクした

  #pragma comment( dll, "C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT\msvcm80.dll" )
  #pragma comment( dll, "C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT\msvcp80.dll" )
  #pragma comment( dll, "C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT\msvcr80.dll" )
  #pragma comment( manifest, "C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.CRT\Microsoft.VC80.CRT.manifest" )

  #pragma comment( dll, "C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.MFC\mfc80.dll" )
  #pragma comment( dll, "C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.MFC\mfc80u.dll" )
  #pragma comment( dll, "C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.MFC\mfcm80.dll" )
  #pragma comment( dll, "C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.MFC\mfcm80u.dll" )
  #pragma comment( manifest, "C:\Program Files\Microsoft Visual Studio 8\VC\redist\x86\Microsoft.VC80.MFC\Microsoft.VC80.MFC.manifest" )
  
 その後、上記2項の状態のXPマシンのROOTの直下に「text_input.exe」を置いて実行した → NG

いよいよ手立てがなくなりました。Windows並びにVisual Studioに精通されている方がおりましたら、素のWindows XPマシンで動作させる方法をご教示頂きたく、お願いいたします。

投稿日時 - 2011-07-20 09:05:54

QNo.6887193

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

WinXPはお持ちなのですね。
ただ乗り換える前に使っていたとのことなので、ライセンス認証がインターネット認証ではなく電話認証になるかもしれません。
(ハードウェアが全てエミュレーションされているものになるので、別のマシンにインストールした場合と同じ扱いになります)
XPモードでエミュレートされるVGAはかなり古いものになっており、DirectXには非対応です。
そのため、起動時に「DirectX9に対応していません。」というようなエラーがでます。
(エミュレートするVGAの変更は不可能です)

XPモードはVirtual PC 2007のWindows 7向けカスタマイズ版的な位置づけのエミュレータです。
DirectX対応の仮想PCエミュレータには、VMware、VirtualBox等があります。
ただし、これらのソフトでWindows XPを動作させる場合は別途Windows XPを用意する必要があります。
(現状普通の手段で手に入れる方法はありませんが。)
XPモードは基本的に企業等で古い資産を利用することを主目的としており、ゲームに関しては全く考慮されていません。
なので、以下のどちらかになると思います。
1)今のままの速度であきらめる。
2)パッケージ版のWindows XPをなんとかして手に入れてVMwareやVirtualBoxにて動作させる。

投稿日時 - 2011-07-20 17:26:32

ANo.2

Wr5

>しかし、XPでは動作しませんでした。。。

エラーが出た…とかでしょうか?

ビルド時に環境を指定したりしてAPIの挙動(というかAPIに渡す構造体)を切り替えるようにする必要があるかも知れません。
_WIN32_IEやWINVER、_WIN32_WINNT等……。
# http://mwlab.net/2010/08/directive.html とか見やすいですかね。
Vista以降で使用可能になったAPIをコールしていたりすると、XPではそんなエントリポイントがOSに無いので読み込み失敗(再配置失敗)になる場合もあります。

投稿日時 - 2011-07-20 15:12:23

補足

> エラーが出た…とかでしょうか?

はい。「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決することがあります。」が出ました。


> Vista以降で使用可能になったAPIをコールしていたりすると

いいえ。一切ありません。その理由は、以前別に所持していたXPマシンにVisual Studio 2003がインストールされてまして、そこで開発した環境を外付けHDに保存しておきました。Vistaマシンを購入した後、Visual Studio 2005をインストールし、HDに保存しておいた開発環境を移してビルドし直して生成された実行体を、妻の素のXPマシンで動作させようとしております。

 現在あるGUIアプリケーションを作成しており、近くこれをXPマシンを持っている人に提供する予定でして、実験的に上記で作成済みの実行体を素のXPマシンで動作させようとしている状況です。


> #http://mwlab.net/2010/08/directive.html とか見やすいですかね。

情報提供ありがとうございます。確認してみます。

投稿日時 - 2011-07-21 14:44:12

ANo.1

Wr5

>・Microsoft Visual C++ 2005 再頒布可能パッケージ (x86)

Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86)
ではないですか?
ServicePack適用前と適用後で別々にインストールする必要があります。
# 実際にはビルドした時のVS2005にServicePackが適用されているかどうか…が問題ですが。

Dependency Walkerを使用すると、具体的にどのバージョンのDLL(ランタイム)が必要か、判るかとおもわれます。
VC++のランタイム、WinSxSの関係で同一のVCで複数のバージョンが入ることもあります。
古いモノがインストールされている状態でMicrosoftUpdateを実施していれば、順次新しいものが入る…ハズですが。
# バージョン間で上書きされても動作するパターンの場合はMicrosoftUpdateで上書きされ、ダメな場合は新規(追加)でインストールされるハズです。

あと……『Debug版でビルドしていた場合は、MicrosoftからDLしてきたランタイムを入れても動きません』ので、ちゃんとRelease版でビルドして下さい。
# 以前、納品された実行ファイルがVC2005のDebug版で動作できないことがありました…
# なんとかVC++2005EE版見つけてとりあえずしのぎましたけど……

投稿日時 - 2011-07-20 09:48:33

補足

早速のご回答ありがとうございます。

> Microsoft Visual C++ 2005 SP1 再頒布可能パッケージ (x86)
ではないですか?

はい、その通りです。私の誤記でした。

> Dependency Walkerを使用すると、具体的にどのバージョンのDLL(ランタイム)が必要か、判るかとおもわれます。

情報ありがとうございます。早速DLしてDependencyを調べたところ、1つのdllが足りないことが分かり、これを入れるべきフォルダに入れました。

>『Debug版でビルドしていた場合は、MicrosoftからDLしてきたランタイムを入れても動きません』ので、ちゃんとRelease版でビルドして下さい。

勿論です。


しかし、XPでは動作しませんでした。。。

投稿日時 - 2011-07-20 12:29:31

あなたにオススメの質問