none
Windowsデスクトップアプリケーションの配置について RRS feed

  • 質問

  • お世話になります。

    Visual Studio Express 2017 で作成したC++ Windowsデスクトップアプリケーションを、インストール無し・前提環境無し(.NETやその他ランタイムなど)で、別PCで実行させたいのですがうまくいきません。

    どのようにすれば良いか、ご教示いただけないでしょうか。

    試した内容は以下の通りです。

    1. 「新しいプロジェクト」→「Visual C++」→「Windowsデスクトップ」→「Windowsデスクトップアプリケーション」でプロジェクトを作成。

    2.  作成されたプロジェクト(ウィンドウを表示するだけの雛形アプリ)をそのままReleaseビルド。

    3.  出力された「Release」フォルダを丸ごと別PCへコピー。

    4. 別PCで、コピーしたexeをダブルクリック。 ⇒ 実行されず。(ウィンドウが表示されない)


    プロジェクトのプロパティで、「C/C++」→「コード生成」→「ランタイムライブラリ」で「マルチスレッド(/MT)」に変えてみましたが、同様に動作しませんでした。

    開発PCでは問題なく実行できるのですが、他に何が必要なのでしょうか?

    初歩的な質問で申し訳ありませんが、よろしくお願いいたします。


    2021年3月16日 5:24

すべての返信

  • kk1515さん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    このドキュメントによると、アプリケーションを他のコンピューターにデプロイする場合は、ターゲットシステムでアプリケーションをサポートするために必要なすべてのファイルを再配布する必要があります。 
    Visual Studioで構築されたアプリケーションは、Visual C ++ Redistibutable(VCRedist)に依存しています。

    ここでは2つの選択肢があります。
    1.ランタイムライブラリの動的リンクを静的リンクに変更します。 マルチスレッドDLL(/ MD)からマルチスレッド(/ MT)に変更する必要があります。 
    あなたはこれを既に試しましたが、失敗しました。 
    これは、Windowsのバージョンが異なれば再配布可能なバージョンも異なるためだと思われます。 
    静的にリンクされたプログラムが期待どおりに動作しない、高度に特殊化された環境に遭遇する可能性があります。

    2.別の可能な解決策は、Microsoft VC ++再頒布可能パッケージの正しいバージョンがターゲットマシンにインストールされていることを確認することです。

    他にご存知の方がおりましたら、情報をご共有いただければ幸いです。

    どうぞよろしくお願いいたします。

    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~

    2021年3月19日 7:36
    モデレータ
  • プロジェクトのプロパティで変更する際、上部の、構成とプラットフォームは意図したもの(Release, Win32 または、Release, x64)を参照していますか?

    自分でもやる初歩的なミスの一つですが、プロジェクトの設定が間違っていて、うまくいかないとかよくあります。

    また、ビルドの設定は、標準ツールバーに構成があります。この辺りの相違でビルドしたつもりがビルドされていなかったということが往々にしてあります。


    とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx

    2021年3月19日 8:24
  • お世話になっております。

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

    > Windowsのバージョンが異なれば再配布可能なバージョンも異なるためだと思われます。 

    開発PC、配置先PCはどちらも Windows 10 (x64) です。

    ・開発PC:Windows 10 Enterprise 1809 (x64)

    ・配置先PC:Windows 10 Enterprise 2016 LTSB (x64)

    > Microsoft VC ++再頒布可能パッケージの正しいバージョンがターゲットマシンにインストールされていることを確認することです。

    希望としては、配置先PCに再頒布可能パッケージがインストールされていなくても、アプリケーション(exeや必要なdll等一式)をコピーするだけで動作することなのですが、確認したところ、配置先PCには以下がインストール済でした。

    ・Microsoft Visual C++ 2005 Redistributable

    ・Microsoft Visual C++ 2008 Redistributable - x64 9.0.30729.4148

    ・Microsoft Visual C++ 2008 Redistributable - x86 9.0.30729.4148

    ・Microsoft Visual C++ 2015-2019 Redistributable (x64) - 14.24.28127

    ・Microsoft Visual C++ 2015-2019 Redistributable (x86) - 14.24.28127

    静的リンクにせずとも動作するのでは?と思われるのですが、動作しません・・・。

    他にも疑わしい点があればご教示いただけると幸いです。

    よろしくお願いいたします。

    2021年3月24日 0:57
  • お世話になっております。

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

    開発PC、配置先PCは以下の通りどちらも Windows 10 (x64) で、

    ・開発PC:Windows 10 Enterprise 1809 (x64)

    ・配置先PC:Windows 10 Enterprise 2016 LTSB (x64)

    ビルド時の構成は Release、x64 を指定してビルドしています。

    ビルドオプションは、マルチスレッドDLL(/ MD)→ マルチスレッド(/ MT)を試した以外はデフォルトのままです。

    開発PCは仮想環境(ビジネスユース)なのですが、例えば開発PC側の環境が何か特殊な構成になっていて、それが原因になっている可能性もあるのでしょうか・・・?

    何か他にも疑わしい点がありましたらご教示いただけると幸いです。

    よろしくお願いいたします。

    2021年3月24日 1:04
  • ビルドしたプログラムの依存関係を調査してみてはいかがでしょうか?

    Dependency Walker や、Dependencies など依存関係をチェックするプログラムがいくつか存在しています。

    Windowsデスクトップアプリを作成し、Release にして /MT に変更しただけのプログラムの場合、user32.dll と kernel32.dll の2つのDLLへの依存関係しかないはずです。もしこれら以外のDLLも参照している場合何かしら追加されてしまっている状態になっていると思います。


    とっちゃん@わんくま同盟, Visual Studio and Development Technologies http://blogs.wankuma.com/tocchann/default.aspx

    2021年3月24日 1:17