• ベストアンサー
  • 困ってます

シェルコマンドの実行を行いたい

シェルコマンドの実行は system("***.exe"); で行えますけど、system関数は実行したexeファイルが閉じられるまで処理がとまってしまいますよね? system関数を呼んだ後すぐに処理を返したい時はどうしたらいいのでしょうか。 また、2つ連続で実行ファイルを実行したいときにはどうしたらいいでしょうか。 system("1.exe"); system("2.exe"); これでは1.exeが終了しないと2.exeが起動しません。 バッチファイルでも同じ事になりますよね。 同時に起動したいのです。どうしたらいいのでしょうか、systemで躓いたので、 spawnで試してみました。 #include <process.h> #include <stdio.h> int main(){ spawn(P_NOWAIT,"notepad"); printf("notepadが起動しました。"); return 0; } こうすればnotepadを閉じなくてもprintf文が実行されると思ったのですが、コンパイルすると 未解決の_spawnが_main内で参照されました。 外部参照1が未解決です。 とでます・・。 どなたか解決策を教えてください>< OS:XPです。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数196
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.3
  • ddnp009
  • ベストアンサー率25% (15/58)

方法にはこだわらないようなので 別アプローチ。 windows.h をインクルードして shellapi.h もインクルードして shell32.lib をリンク。 ShellExecute(NULL, "open", "notepad.exe", NULL, NULL, SW_SHOWNORMAL);

参考URL:
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpshell/html/_win32_shellexecute.asp

共感・感謝の気持ちを伝えよう!

その他の回答 (2)

  • 回答No.2
  • FAY
  • ベストアンサー率49% (95/193)

_spawn関数はそのままでは使えません。 使い方に応じて必要なサフィックスを付加する必要があります。

参考URL:
http://www.microsoft.com/japan/developer/library/vccore/_crt__spawn.2c_._wspawn_functions.htm

共感・感謝の気持ちを伝えよう!

  • 回答No.1

未解決の~ というのは、外部宣言だけされていて実体が見つからない場合です。 多くの場合は必要なDLLとリンクしていないのが原因です。 必要なものを調べてリンクしてください。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • 実行ファイルの容量を減らしたいです

    全くの超入門者です ですが、どうしてもやりたいことがあります タイトル通りなんですが、実行ファイルの容量を減らしたいです Releaseとかいろいろやって、16KB程度まで落としたのですが 色々とみると、容量が小さいのを良く見かけます なので、ライブラリを全て無視したところ、実行ファイルが1KBまで 減少できました しかし、これをすると main.obj : error LNK2001: 外部シンボル "_printf" は未解決です Release/main.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー というエラーが出てきてしまいます ソースはこのようになっています #include <stdio.h> #include <windows.h> main(){ printf("sss"); } mainCRTStartup (HINSTANCE hInstance,DWORD fdwReason,PVOID pvReserved){ return TRUE; } 本当に超入門者なんで、こんなことやっても違うことやって知識身につけろといいたいかもしれませんが せめて簡単なやり方だけでもお願いします いつか使用したいので..

  • 他の実行ファイルを実行するプログラム

    他の実行ファイルを実行するプログラムを作りたいです。 わかりにくいと思うので例を書いて説明します。 まずhello.cというプログラムがあったとします。 中身は -hello.c----------------- #include <stdio.h> main(){ printf("Hello!\n"); } -------------------------- これをコンパイルしてできた実行ファイルを他のプログラムから呼び出す?実行したいんです。 説明が下手ですいません(>_<) たとえば新しくexe.cというプログラムを作ります。 このexeを実行するとhello.exeが呼び出されて 結果的にhello.cの中身が実行されるような exe.cを作りたいです。 初歩的な質問ですいません。 どなたかアドバイスいただけないでしょうか(>_<)

  • visual studioでsystem関数

    visual studio 2005でsystem関数を使っていました. system("notepad"); は難なく実行できました. 他の実行ファイルも実行できるかと思い 「C:\Program Files\IrfanView」にある「i_view32.exe」を実行しようと思い, system("i_view32.exe"); で「デバックなしで開始」で実行させたところ 'i_view32.exe'は,内部コマンドまたは外部コマンド, 操作可能なプログラムまたはバッチ ファイルとして認識されていません. とエラーが出ました. もちろんC:\Program Files\IrfanViewのPATHは通してあります. しかしDebugフォルダにあるプログラムの実行ファイルをクリックで実行させたところ普通にi_view32.exeは起動しました. 「デバックなしで開始」で起動させたいのですがどうすればよいのでしょうか? 分かる方いたらよろしくお願いします.

  • このエラーは??

    コンパイラーすると次のようなエラーがでました。 a.obj : error LNK2019: 未解決の外部シンボル _printfが関数_mainで参照されました。 a.exe : fatal error LNK1120: 外部参照1が未解決です。 このエラーはなんでしょうか??よろしくお願いします。

  • 書式制御'%d'と'%f'について

    以下のようなソースがあります。 実行すると、異常な、という処理において、 printf関数で、int型を'%f'で、処理すると 0.000000になります。 また、double型を'%d'で、処理すると 0になります。 これは何故、0になるのでしょうか。 説明できるかた、よろしくお願いいたします。 include <stdio.h> void main(){  int i;  double d;  i=100;  d=1.0;  printf("i=%d\n",i); /* 正常なprintf関数 */  printf("d=%f\n",d); /* 正常なprintf関数 */  printf("i=%f\n",i); /* 異常なprintf関数 */  printf("d=%d\n",d); /* 異常なprintf関数 */  return; }

  • DB2付きのC言語がコンパイルできません。

    CはMicrosoftVisualStudio2012 DBはIBM DB2 です。 同じ環境でコンパイル実行できていたのに、 PCがおかしくなったのでフォーマットして入れなおしたらコンパイルができなくなりました。 よろしくおねがいします。 ソースはこちらです。 #include <stdio.h> exec sql include sqlca; void main() { exec sql connect to sample; if(SQLCODE!=0) { printf("SQL CONNECT %d", SQLCODE); } else { exec sql update Test1 set col2 = 'bababa'; if(SQLCODE!=0) printf("SQL UPDATE %d", SQLCODE); } exec sql connect reset; } コンパイルコマンドです db2 connect to sample db2 prep Test11.sqc bindfile db2 bind Test11.bnd cl -Z7 -c -W2 -D_X86_=1 -DWIN32 -I"c:\Program Files\IBM\SQLLIB\include" Test11.c link -debugtype:cv -outTest11.exe %1.obj "c:\Program Files\IBM\SQLLIB\lib\db2api.lib" エラーメッセージです Test11.obj : error LNK2019: 未解決の外部シンボル _sqlaaloc@16 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlacall@20 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlasetdata@24 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlastop@4 が関数 _main で参照されました。 Test11.obj : error LNK2019: 未解決の外部シンボル _sqlastrt@12 が関数 _main で参照されました。 Test11.exe : fatal error LNK1120: 5 件の未解決の外部参照

  • LNK1120 エラーについて

    このエラーが出たら一体何が問題なんですか? このエラーが出た以降、Visual C++ 2008がずっと使えなくなってしまいました…。ちなみ、この時にビルドで出力されたのは SVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。 ■■■\Debug\tr3.exe : fatal error LNK1120: 外部参照 1 が未解決です。 …でした。 あと、入力したものは普通に #include <stdio.h> void main(){ printf ("Hello World"); } です

  • C言語でレジストリ取得「未解決の外部シンボル」

    C言語でレジストリを取得する時に「未解決の外部シンボル」エラー レジストリを取得したくて、下記のコードで実行したら、 ====================================================================== #include <stdlib.h> #include <stdio.h> #include <windows.h> #include <shlwapi.h> int main(void) { char Value[1000]; DWORD ValueSize; char *DefaultValue = ""; ValueSize = 1000; /* HKEY_LOCAL_MACHINEのSoftware\masapicoというキーにあるfooという名前のレジストリ値を取得 */ SHRegGetUSValue( "Software\masapico", "foo", NULL, Value, &ValueSize, FALSE, DefaultValue, lstrlen(DefaultValue) + 1); /* 結果を表示 */ printf("%s\n", Value); return 0; } ====================================================================== こういうエラーが出ます。 1>コンパイルしています... 1>testExe.cpp 1>リンクしています... 1>testExe.obj : error LNK2019: 未解決の外部シンボル _SHRegGetUSValueA@32 が関数 _main で参照されました。 1>I:\testExe\Debug\testExe.exe : fatal error LNK1120: 外部参照 1 が未解決です。 いろいろ調べましたが原因はわからず困っています。 Javaはある程度やってましたが、Cに関しては初心者です。 環境は Win7 64bitです。 WinXPの環境でコンパイルしても同じ現象です。 その時のエラーは error LNK2019: 未解決の外部シンボル _SHRegGetUSValue が関数 _main で参照されました。

  • PHPからCプログラムを実行して実行結果をHTML上に表示

    PHP初心者です。PHPからCプログラムを実行して実行結果をHTML上に表示する方法が分からなく困っています。 Cプログラムの中身は、 #include <stdio.h> int main(){ printf("Hello."); } です。 phpの中身は、 <HTML> <HEAD><TITLE>Cプログラム呼び出し</TITLE></HEAD> <BODY> <?php $cmd = "test.exe"; $a = exec($cmd); echo $a; ?> </BODY> </HTML> としており、調べてみるとexec()関数で外部プログラムを実行すると書いてあったのでこのように作成しました。

    • ベストアンサー
    • PHP
  • C言語の実行について、

    #include <stdio.h> #define N 2 void main(void) { int i ,j ; for( i=1 ; i <= N ; ++i) { for( j=i ; j < N+2 ; ++j) { printf("j=%d\n",j); } printf("i=%d\n",i); } } を実行すると、 j=1,j=2,j=3,i=1,j=2,j=3,i=2となったんですが、 どういった順序で行われているのでしょうか? よろしくお願いします。