• 締切済み

OSによるWinExecの動作の違いについて

開発環境:VC6.0 MFCアプリケーションとして作成しています。 メインアプリケーションから、データ編集用アプリケーションをWinExecで起動しています。メインアプリケーション、データ編集用アプリケーションともに内部でスレッドを生成して動作しています。 当初、Windows2000で動作させていましたが、両アプリケーションともに問題なく動作していました。最近、WindowsXP上で動作させたところ、以下のような現象が発生することがわかりました。  1.メインアプリケーションを起動。  2.メインアプリケーション内のInitInstance内でWinExecにより、目的のアプリケーションを起動。  3.Windows2000であれば、WinExecより即戻り、メインアプリケーションの処理が継続実行されます。WindowsXPだと、こうはならず、一定時間戻らず、一定時間(約30秒)経過後、メインアプリケーションの処理が継続実行されます。  WinExecの説明の中で、この関数は、Win32 上では、呼び出されたプロセスが GetMessage 関数を呼び出したときか、タイムアウト時間が経過したときに制御を返すとありました。今回の場合はタイムアウト時間が経過した場合に相当すると思われますが、Windows2000で問題なく、制御が呼び元に戻り、WindowsXPだと、タイムアウトと思われる動作となっているようで、今後、新しいOSで使用していくうえで不安です。 (今回のWinExecに限らないと思いますが)  何か今回のWinExecに関連する技術情報等ご存知であれば教えていただければ助かります。  以上分かり難い説明とは思いますがよろしくお願いします。  ※実用上は、Win32上ではWinExecは推奨されていないようで、CreateProcessを使用すればWindows2000のときと同じレベルで動作することは確認できています。  ※WindowsXPはProfessionalを使用しています。

みんなの回答

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★『WinExec』API関数は古いです。 ・質問者さんもそのことは分かっていますよね。 ・『CreateProcess』関数で同じレベルで動作することを確認しているのならば、  何も『WinExec』関数を使う必要はないのでは? ・私も最初は『WinExec』関数で他のプログラムを手軽に起動していましたが、  その後に『ShellExecute』関数に切り替えました。 ・この『ShellExecute』関数は『CreateProcess』関数よりも手軽に使えますので  乗り換えたらどうでしょうか? ・下にマクロ関数を紹介します。 ●マクロ #define MacroWinExec(s,p,n) ShellExecute(NULL,TEXT("open"),s,p,NULL,n) ●使い方 ・引数『s』にプログラム名 ・引数『p』にプログラムの引数 ・引数『n』に表示状態 ●紹介 HINSTANCE ShellExecute(  HWND hwnd,       // 親ウィンドウのハンドル  LPCTSTR lpVerb,    // 操作  LPCTSTR lpFile,    // 操作対象のファイル  LPCTSTR lpParameters, // 操作のパラメータ  LPCTSTR lpDirectory,  // 既定のディレクトリ  INT nShowCmd      // 表示状態 ); 最後に: ・『ShellExecute』関数は、ファイルに関連付けられたものならばすべてを起動できます。 ・『http://~』をプログラム名に指定するとブラウザを起動してウェブサイトを開くます。 ・『mailto:~』をプログラム名に指定するとメーラーを起動してメールを送れます。 ・類似関数で『ShellExecuteEx』関数もあります。こちらは構造体にいろいろセットして  呼び出す形になります。→ちょっとだけ面倒です。 ・以上。おわり。

参考URL:
http://www.sm.rim.or.jp/~shishido/shelle.html
mmatsuo
質問者

お礼

回答いただいたマクロを、自分の環境で確認してみました。WindowsXP上でもCreateProcessと同様の動作となりました。用法の簡便さなどを踏まえて、今回のShellExecuteのほうを使用していくことを考えています。 ありがとうございました。

mmatsuo
質問者

補足

早速、回答いただきありがとうございます。 お勧め下さった「ShellExecute」を使用したマクロで動作を見てみようと思います。 ありがとうございました。

関連するQ&A

  • Android-Service、アプリの再起動

    mainのActivityがあり、そこからGPSを定期取得するServiceを作成しました。 ここに  1.一定時間が経過したら、Service自身の再起動を行う   2.一定時間が経過したら、アプリケーションの再起動を行う 上記のような動作を考えているのですが、どのように実装するのがベストでしょうか? 1.に関しては、Timerで一定時間経過後に、ServiceのStop,Startを行うと思うのですが、どこにどのような記述で処理を実装したらいいのか判りません。 2.は検索しましたが、それにあたるようなヒントを得られませんでした。 もしご存じでしたら、ご教授お願いします。

  • スクリーンセーバーの動作

    WindowsXP sp3 ノートDynaBook です。 スクリーンセーバーをブランク、待ち時間3分に設定しましたが動作が働く場合(画面がブランクになる)と働かない場合があります。 下記 3、4の状態が待ち時間経過してもスクリーンセーバーが働かない(画面がブランクにならない)。どうしてでしょうか? ------------------------------------------------------------ 1 起動アプリケーション無し状態 2 エクセル起動中だが画面表示のみの待機状態 3 エクセル待機状態 + IEでネットラジオにアクセスしWindows Media Playerで音声再生 4 上記3のアプリケーション全てをタスクバーに入れた状態 ---------------------------------------------------------------

  • キーボードの特定のキーの動作がおかしくなり困っています。OSはWind

    キーボードの特定のキーの動作がおかしくなり困っています。OSはWindowsXPです。 ワードパッド等で日本語キーボードの右上のバックスペースの左にある「¥」キーを押すと画面に「ute* 」と表示されIEが起動されてしまい、「¥」の入力が出来ません。 SHIFT+「¥」キーでは、「|UTE* 」と表示され同じくIEが起動されます。他のキーは正常に動作しています。特定のアプリケーションだけでなく、どんなアプリケーションでも同様です。どなたか解決法をご教授下さい。よろしくお願いします。

  • OS10.3での動作環境

    powerbookG4 1.33GHz での最も良好な環境を作るためのアプリケーションのアップデート、アップグレードを教えて下さい。 OS10.3やクラッシック環境での動作が可能なアプリケーションを使用するために、powerbookG4 1.33GHz OS10.3.7 を中古で購入しました。 出来るだけ、良好な環境を作る為に、OS10.3.9にアップデートしたところ、safari(1.3)が起動後すぐに強制終了してしまうようになってしまいました。OS以外にも、safari,iTunesをOS10.3上で動く範囲で最新のものにしたいのですが、適切なバージョンが分かりません。 どなたか、教えていただけないでしょうか 宜しく、お願いします。

  • マウスやキーボードが突然動作しなくなる

    僕はWindowsXPのデスクトップ型のパソコンを使っているのですが、 今までは正常にマウスとキーボードが使えていたのに 急にマウスが動作しなくなるようになりました。 キーボードも同時に使えなくなることもあります。 前にも同じようなことがあり、再起動したらその時は直ったのですが 今回は再起動しても直りませんでした。 時間を置いてまたやってみると正常に動作したのですが、 今回はマウスとキーボードが止まったり戻ったり、 かなり動作が遅くなったりする場合もありました。 そして、最終的にマウスもキーボードも止まってしまいました。 幸いキーボードだけは使えるようになったので、 この質問をしています。 これらのことから原因が分かる人はいませんか?

  • OS10.2.8ですが、動作が遅くなりました。

    PowerBook G4/mac OX 10.2.8/メモリ768MB です。 昨日から調子が悪くなってきました。それは、まるでメモリ不足のように動作がすごく遅くなったのです。再起動に10分くらいかかったり、フォルダを開けるのに5分かかることもあったりです。いちいち「虹色のグルグル(すいません正式名称がわかりません…)」が出現して待たなければなりません。何よりも、WEBデザインの仕事でphotoshopCSを使用しているのですが、その動作がどうにも遅いです。処理が遅いというのではなく、ファイルを開くのに時間が掛かったり、一つの作業をするとかキャンセルするとかでも遅いんです。 P-RAMのクリアとかは試みているのですが、改善しません。 何かHDが常に書き込み中か読み込み中のようにカリカリという音もしているのですが、これが原因かとも思いますが…。 またこの文字うちにしても漢字の変換で少し時間が掛かることもあります。原因か対処法がなにかありませんでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • Mac
  • 32ビットOSと64ビットOS。

    32ビットアプリケーションを32ビットOS上と64ビットOS上で使うときの質問です。 ただ32ビットアプリケーションと言っても、メモリーを2GB以上使う重たいアプリケーションばかりなのですが これらを複数起動する場合、32ビットOS上と64ビットOS上で処理速度などで違いは出るのでしょうか? 例えば、 PC構成(1) OS:WindowsXP64Bit、メモリー:8GB搭載  PC構成(2) OS:WindowsXP32Bit、メモリー:3GB搭載 CPUは同じとして、重たい32ビットアプリケーション複数使用の動作に違いは出るのでしょうか? 自分では、メモリー4GB以上搭載のPCでは64ビットOSを載せたほうが32ビットアプリケーションも快適になるのでは? と考えているのですが・・・ どなたか教えてください。

  • コントロールキーが動作しなくなってしまったら?

    Win98を使用しています。 イラストレーター使用中にコントロールキーが動作しなくなってしまいました。 再起動したのですが、変化がありません。 イラストレーター以外のアプリケーションソフトでも同じ状態です。 どうしたらいいのでしょうか? よろしくお願い致します

  • モンハンフロンティアが「動作を停止しました」

    モンハンフロンティアをカプコンIDでインストールして起動しようとしたら mhf.exeは動作を停止しました。 となり起動できません どうすれば起動できるようになるでしょうか。 OSはwindows7 64bit スペックは基準をクリアしています グラボはGeForce GTS 450 を使用しています。 以下は動作を停止したときの問題の詳細です 問題の署名: 問題イベント名: APPCRASH アプリケーション名: mhf.exe アプリケーションのバージョン: 0.0.0.0 アプリケーションのタイムスタンプ: 516ad3b8 障害モジュールの名前: nvwgf2um.dll 障害モジュールのバージョン: 9.18.13.1106 障害モジュールのタイムスタンプ: 50f9458d 例外コード: c0000005 例外オフセット: 000f651a OS バージョン: 6.1.7601.2.1.0.768.3 ロケール ID: 1041 よろしくお願いします。

  • アプリケーションが動作しない

    今回、ALTERA製のソフトウェア開発ツール(NIOSII)のアプリケーションを動作したところ、私のPCにインストールされているウイルスセキュリテイがインストールされていると、開発ツールアプリケーションが動作しない現象がでました。 このアプリケーションは、USBを介してハードウエアーボートと接続してエミュレーションのデバッカーツールです。 弊社のウイルスセキュリテイをアンインストールすると動作が正常に行われます。 ウイルスセキュリテイをアンインストールせずに使用する方法はないでしょうか? ソースネクスト製品 製品名  :ウイルスセキュリテイ ZERO Windows Vista対応版 バージョン:9.2.0073 使用PC 機種:SONY Vaio VGN-S72PB/B typeS OS:WindowsXp Professional クロック:インテル Pentium M 1.72GHz

専門家に質問してみよう