none
C++/CLIで生成したexeファイルを実行できない

    質問

  • C++/CLIでデバッグなしで生成したexeファイルが実行できない問題点について

    生成したパソコンでは当然実行できるのですが、別PCにコピーすると実行できません。(Debugファイルごと、VisualStudioが入っていないPCにコピー)

    MSVCR140.dllがないとかエラーが出て怒られます。

    VisualStudio2017で生成したものなので、Visual C++ 再頒布可能パッケージ(2017)を、VisualStudio2017の入っていないPCにインストールしましたが症状は改善されませんでした。

    VisualStudioがなくてもexeファイルを実行できるようにするようにする方法を教えて下さい。(極力、相手にはソフトをインストールさせたくないです。)

    2018年8月25日 11:11

回答

  • ①.NET Freamworkのバージョンが合っていても、VisualC++ 2017のランタイムは必須ということでしょうか?

    はい。Azulean 様の回答と被りますが、C++/CLI の exe では、Visual C++ のランタイムが必須となります。

    ②MSVC140D.dllを実行するためには、ランタイムだけではなく、VisualStudioも必須ということでしょうか?

    実行するためには、必ずしも Visual Studio のインストールは必要ではありません。Visual Studio をインストールした環境から、MSVC140D.dll をコピーして対象の PC で作成した exe と同じフォルダに DLL を置けば実行できたと思います。ただ、配布用には Release 版でビルドすることをお勧めします。(他にも複数の DLL が必要になると思いますが同様にコピーすれば動作させられると思います。ライセンス的に配布してよいかどうかは確認していません)

    ③リリースモードでビルドすれば、.NET Freamworkとランタイムのみだけで実行できますか?

    いえ、リリースビルドでも C++/CLI の exe では Visual C++ ランタイムが必要です。

    ④大変恥ずかしいことにリリースモードでビルドする方法を知りません。

    Visual Studio のツールバーに Debug と Release を選択するためのコンボボックスはないですか?標準的なプロジェクトでは、そこの切り替えで Relese 版をビルドすることができます。

    • 回答としてマーク Expressll 2018年9月6日 15:22
    2018年8月26日 3:19

すべての返信

  • 作成した exe とインストールしたランタイムのプラットフォーム(x86 か x64)は一致していますでしょうか?

    MSVCR140.dll は Visual Studio 2015 の Visual C++ 再頒布可能パッケージでもインストールされますので、作成されたモジュールに対応した(x64またはx86)の Visual Studio 2015 の Visual C++ 再頒布可能パッケージを下記からダウンロードして対象の PC にインストールしてみて動きますでしょうか。

    https://www.microsoft.com/ja-jp/download/details.aspx?id=48145

    2018年8月25日 11:36
  • MSVCR140.dllがないとかエラーが出て怒られます。

    私の知る限り、MSVCR140.DLL はないはずなんですが…。
    VCRUNTIME140.DLL か、VCRUNTIME140D.DLL のどちらかではないでしょうか。

    もし、末尾に D がつく方だった場合、Debug 版を渡していることになるので、Release でビルドし直してください。
    D がつかない方であったとしても、すでに指摘のあるとおり、Visual C++ 2015 のランタイムが必要です。

    (極力、相手にはソフトをインストールさせたくないです。)

    CLR プロジェクト(C++/CLI)を使った場合、ランタイム不要な形にはできません。
    少なくとも、.NET Framework に依存しますので、環境不問で「(利用者に)インストールさせたくない」は達成不可能です。
    (もし、その要件が最優先されるなら、C++/CLI や .NET 系言語を使わずに、作り直すことになります)

    2018年8月25日 13:00
    モデレータ
  • 回答ありがとうございます。

    正しくはMSVCP140D.dllでした。

    それを踏まえて再度質問させて頂きます。

    ①.NET Freamworkのバージョンが合っていても、VisualC++ 2017のランタイムは必須ということでしょうか?

    ②MSVC140D.dllを実行するためには、ランタイムだけではなく、VisualStudioも必須ということでしょうか?

    ③リリースモードでビルドすれば、.NET Freamworkとランタイムのみだけで実行できますか?

    ④大変恥ずかしいことにリリースモードでビルドする方法を知りません。

    プロパティからリリースモードのビルドの設定をすることが出来るのは知っているのですが、ツールボックスのビルドの項目にはリリースモードというものは存在しませんでした。

    2018年8月26日 1:45
  • 回答ありがとうございます。

    正しくはMSVCP140D.dllでした。(そしてバージョンは2017です。)

    それを踏まえて再度質問させて頂きます。

    ①.NET Freamworkのバージョンが合っていても、VisualC++ 2017のランタイムは必須ということでしょうか?

    ②MSVC140D.dllを実行するためには、ランタイムだけではなく、VisualStudioも必須ということでしょうか?

    ③リリースモードでビルドすれば、.NET Freamworkとランタイムのみだけで実行できますか?

    ④大変恥ずかしいことにリリースモードでビルドする方法を知りません。

    プロパティからリリースモードのビルドの設定をすることが出来るのは知っているのですが、ツールボックスのビルドの項目にはリリースモードというものは存在しませんでした。

    2018年8月26日 1:46
  • ①.NET Freamworkのバージョンが合っていても、VisualC++ 2017のランタイムは必須ということでしょうか?

    はい。Azulean 様の回答と被りますが、C++/CLI の exe では、Visual C++ のランタイムが必須となります。

    ②MSVC140D.dllを実行するためには、ランタイムだけではなく、VisualStudioも必須ということでしょうか?

    実行するためには、必ずしも Visual Studio のインストールは必要ではありません。Visual Studio をインストールした環境から、MSVC140D.dll をコピーして対象の PC で作成した exe と同じフォルダに DLL を置けば実行できたと思います。ただ、配布用には Release 版でビルドすることをお勧めします。(他にも複数の DLL が必要になると思いますが同様にコピーすれば動作させられると思います。ライセンス的に配布してよいかどうかは確認していません)

    ③リリースモードでビルドすれば、.NET Freamworkとランタイムのみだけで実行できますか?

    いえ、リリースビルドでも C++/CLI の exe では Visual C++ ランタイムが必要です。

    ④大変恥ずかしいことにリリースモードでビルドする方法を知りません。

    Visual Studio のツールバーに Debug と Release を選択するためのコンボボックスはないですか?標準的なプロジェクトでは、そこの切り替えで Relese 版をビルドすることができます。

    • 回答としてマーク Expressll 2018年9月6日 15:22
    2018年8月26日 3:19
  • MSVC140D.dll をコピー

    デバッグ版ランタイムの再配布は認められていません。

    あと、2015 のランタイムはユニバーサルランタイムとして Windows 側で持たれるものなど、分離されているので、同じフォルダーにその DLL だけ配置して動くかは相手の Windows のバージョンに左右されるのでおすすめしません。

    2018年8月26日 3:32
    モデレータ