![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
開発環境: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を使用しています。
A 回答 (1件)
- 最新から表示
- 回答順に表示
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
この回答への補足
早速、回答いただきありがとうございます。
お勧め下さった「ShellExecute」を使用したマクロで動作を見てみようと思います。
ありがとうございました。
回答いただいたマクロを、自分の環境で確認してみました。WindowsXP上でもCreateProcessと同様の動作となりました。用法の簡便さなどを踏まえて、今回のShellExecuteのほうを使用していくことを考えています。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Mac OS 動画ファイルの画質比較アプリ (Mac) 1 2023/07/14 19:19
- Windows 10 Corei 7-12700(Alder Lake) と Windows11の不具合? 5 2023/01/14 12:06
- ネットワーク クラウド環境の範囲について教えてください。 7 2023/03/09 15:50
- iPod・ウォークマン・音楽プレーヤー Windows10でwindows8やwindows7のアプリケーションを動かしたい 6 2022/09/20 23:16
- ネットワーク OSI参照モデルの各層の役割がわかりません。 3 2023/04/21 21:12
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- その他(OS) OSとCPUの関係について 2 2023/05/04 23:33
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- ガラケー・PHS SMSメールの受信遅延原因はガラケー自体の欠陥では 8 2022/08/06 11:46
- グループウェア Macでオープンオフィスが開きません 1 2023/01/14 14:22
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba アプリケーションが立ち上...
-
現在起動中のアプリケーション...
-
AccessVBA ShellExecuteAについ...
-
コンソールアプリケーションの...
-
Ctrl + P のメッセージ送信
-
フレームワーク「4.8.1」で、[S...
-
別プログラムの終了監視
-
VBSでのSendKeysでの画面の最小化
-
アプリケーションをVBS(WSH?)で...
-
アプリは強制停止しておけば、...
-
タスクマネージャーの表示が・・
-
pccNTmon.exeとntrtscan.exeの違い
-
Shell関数の終了を調べる方法
-
VB.NETでMessageBoxを表示した...
-
702NKの電池が1日持ちません
-
ダイアログ中の下線付きテキス...
-
MFCでコンソール出力
-
パソコンの起動が遅く、おもた...
-
Accessフォームからの外部アプ...
-
Macターミナルで実行中のプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Vba アプリケーションが立ち上...
-
VBSでのSendKeysでの画面の最小化
-
コンソールアプリケーションの...
-
フレームワーク「4.8.1」で、[S...
-
WSH(VBScript)でアプリケーショ...
-
Accessフォームからの外部アプ...
-
VB6での二重起動(複数起動)の制...
-
イラストレーターCS4のシリアル...
-
VB.NETでMessageBoxを表示した...
-
Console Applicationをタスクト...
-
Java Web Start アプリケーショ...
-
VB.NETでフォームアクティブの...
-
C#でGUI・CUIの判断する仕方を...
-
vb6で異なるのプロジェクト間で...
-
MFCアプリケーションでの終了コ...
-
pccNTmon.exeとntrtscan.exeの違い
-
自分自身を更新するプログラム
-
excel VBAで、外部アプリケーシ...
-
vcxprojファイルの修正法???
-
実行時のコマンドプロンプトを...
おすすめ情報