1

WinExecいくつかのコマンド ライン パラメーターを使用して別の実行可能ファイルを起動するために、1 回の呼び出しで C++ プロジェクトをコンパイルしたいと考えています。Microsoft のサイド バイ サイド DLL を必要とせずに動作する実行可能ファイルを生成するために、プロジェクトで指定する設定がわかりません。これをターゲット システムにインストールする必要はありません。ヒントはありますか?

この症状は、アプリケーションの起動に失敗し、次のイベントがアプリケーション ログに書き込まれることです (フランス語から自由に翻訳されたものです)。

Error, SideBySide, event #33
Microsoft.VC90.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="9.0.21022.8" cannot be found. 

更新: 使用が悪い習慣であることは知っていWinExecますが、それは魔法のように機能し、Microsoft は API の将来のリリースでそれを削除することはできないのではないでしょうか?

4

3 に答える 3

7

必要なものが CreateProcess/ShellExecute (WinExec は NT 3.1/Win 95 から廃止されました) だけの場合、ランタイム ライブラリはまったく必要ありません。Project Properties / Configuration / Linker / InputでIgnore All Default Librariesを有効にし、kernel32.lib をAdditional Dependenciesに追加します。

于 2009-03-27T22:38:12.760 に答える
7

ランタイム (/MT または /MTd) を静的にリンクするように指定した場合は、問題ありません。プロジェクト プロパティ -> C/C++ -> コード生成 -> ランタイム ライブラリ

于 2009-03-27T22:31:38.220 に答える
2

解決策は、jachymko と Josh の両方によって (部分的に) 回答されています。完全なソリューションは次のとおりです。

  1. Project Properties / Configuration / Linker / Input / Ignore All Default LibrariesYesに設定し、 Additional Dependenciesに追加kernel32.libします。コードは自動的にとを参照するため、これだけではリンクしません。__security_check_cookie_WinMainCRTStartup

  2. /GSスイッチを削除して、セキュリティ チェック コードを挿入しないようにコンパイラに指示します。このためには、Project Properties / Configuration / C/C++ / Code Generation / Buffer Security CheckNoに設定します。

  3. Project Properties / Configuration / C/C++ / Code Generation / Runtime LibraryMulti-threaded (/MT)に設定します。

  4. 最初の Visual Studio 2008 生成コードには、という名前のエントリ ポイント_tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)が含まれています。名前を変更して変更しWinMain、3 番目の引数を に変換しLPSTRます。

  5. Project Properties / Configuration / Linker / Advanced / Entry Pointを に設定しWinMainます。

デフォルトの C++ プロジェクトに対するこれらの変更により、コードは最終的にコンパイルおよびリンクされ、ランタイム ライブラリが不足している、新しくインストールされた Vista または XP 上で実行されます。

于 2009-03-28T09:36:37.017 に答える