私は単純な実行可能ファイルを持っています。これは、コマンドライン引数、単純な初期化、および状態メッセージの確認から始まります。プログラムのローカル実行では復帰しません。リモート実行はしますか?
if (argc != 2)
{
std::cout << "Must provide IP address as argument.\n";
}
Comms_SSL comms;
std::string msg;
std::cout << "Version Number: " << SOME_VERSION_NUM << std::endl;
マシンから直接実行可能ファイルを実行すると、期待どおり動作します。それはバージョン番号を表示し、プログラムに沿って続けます。
この実行可能ファイルをpsexec経由でリモート実行すると、ツールのバージョンがコンソールに出力された後にプログラムを実行するために、プログラムの実行がキャリッジリターンを待機します。ソースコード内のどの時点でも、どんな種類の入力のためのプロンプトも存在しません。
私は「\ nを」で終了するバージョン番号を出力ラインを変更した場合奇妙なことは、次のとおりです。
std::cout << "Version Number: " << SOME_VERSION_NUM << '\n';
私はPSEXECを経由して再びこの実行ファイルを実行すると、プログラムの実行をを待ちTool Versionが表示される前にプログラムを続行するには、キャリッジリターンをコンソールに出力します。
ここで何が起こっているのか分かりません。私はこのプログラムをpsexec経由で実行するには、キャリッジリターンを続行する必要はありません。
キャリッジリターンを送信するまでプログラム自体がブロックされていますか?私はそれが完了するまで実行されるのがより妥当であることがわかりますが、その出力は、あなたが送料を返すまであなたに転送されません。そして、それはすべてのpsexecであり、C++の問題ではありません。 –
出力バッファリングは、出力が端末か他の種類のストリームのどちらであるかによって異なります。 'psexec'は端末をエミュレートしていないので、出力はバッファされているようです。 'std :: endl'はバッファをフラッシュします。 – Barmar
'psexec'のドキュメントを調べて、サーバ上に擬似ttyを取得するオプションがあるかどうか確認してください。 – Barmar