CreateProcessでwordの複数プロセスを起動できない

このQ&Aのポイント
  • 指定したOfficeファイルをプログラムから開く方法を作成中です。
  • CreateProcessを使用してアプリを起動し、閉じられるまで待機します。
  • 複数のwordファイルを開く場合、待機せずに次の処理に移行してしまいます。
回答を見る
  • ベストアンサー

CreateProcessでwordのプロセスが複数出来ない

開発環境:VC++2008 / Windows XP / Office2007 指定したOfficeファイルを、プログラムからアプリを指定して開き、 そのファイルが閉じられたら、次の処理を行うというプログラムを 作成中なのですが、 FindExecutableでアプリを検索し、 CreateProcessでアプリを起動。 WaitForSingleObjectで閉じられるまで待機し、 閉じられたら、次処理へ。という流れを マルチスレッドで行っています。 1つ目のwordファイル(a.doc)を開き、 2つ目のwordファイル(b.doc)を開くと、b.docの方は、 WaitForSingleObjectで待機せず、そのまま 次処理へ移行してしまいます。 CreateProcessの戻り値は正常で、b.docファイルも起動するのですが、 プロセス自体は、タスクマネージャで見る限り、1つしかありません。 word.exeが単一プロセスで複数ファイルをコントロールしていると思うのですが、 別プロセスで複数のwordを立ち上げる事は可能なのでしょうか?

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

  • ベストアンサー
  • tadokiro
  • ベストアンサー率100% (1/1)
回答No.1

別の用事で立ち寄ったら答えられそうな質問が… winword.exe /w YourFileName

参考URL:
http://office.microsoft.com/ja-jp/word/HP101640101041.aspx
lhouse
質問者

お礼

ありがとうございます。 別プロセスでの起動に成功しました。 解決方法がどうしても見つからず、徹夜してました。。。 これで、wordは先へ進めます。 ただ、徹夜中にpptも同じ現象が起こることが判明し、 wordと同様にコマンドラインを調べてみましたが、 新規プロセス起動は見つからなかったです。残念ながら。。。

その他の回答 (1)

  • tadokiro
  • ベストアンサー率100% (1/1)
回答No.2

「別ユーザで実行する」という非常手段があるみたいだ。 それがダメならダメみたい。

lhouse
質問者

お礼

非常手段過ぎますね。。 調べていただいて、ありがとうございます。 pptについては、別の手段を考えたいと思います。

関連するQ&A

  • エクスプローラから開かれるWordを別プロセスにするには

    VC++2008にてプログラムを作成しています。 自作プログラム(疑似エクスプローラ)にて、 WordやExcelファイルをCreateProcessにて オープンし、WaitForSingleObjectにて ファイルが閉じられるまで待機。 ファイルが閉じられたら、終了処理という流れのシステムを 作成しています。 自作プログラムからオープンする際は、 Officeのコマンドラインオプションを用いて 別プロセスで起動するようにしていますので、 自作プログラムからWord(またはExcel)ファイルを 複数開いても、個別プロセスになるので、 各ファイルが個別に終了処理を行えるようになっています。 (なっていると思っていた) 問題は、自作プログラムからWord(a.doc)を開き、 エクスプローラから別ファイルのWord(b.doc)を開いた際、 b.docは個別にプロセスが作成されず、 a.docで作成した1プロセスにまとめられてしまうことです。 そのため、a.docを閉じても、b.docが開いている限り、 終了処理に移行しません。 APIフックにて、CreateProcessを引っ掛けてみたのですが、 エクスプローラからのファイルオープン時には 呼ばれていないようで、自作プログラム外で ファイルオープンをした際に、強制的に独自プロセスで 起動する方法が分りません。 自作プログラム起動時に限り、Word,Excelのファイルを 独自プロセスで開かせたいのですが、 解決方法はありますでしょうか? よろしくお願いします。

  • プロセスが実行中かどうか調べる方法

    CreateProcessで作ったプロセスが実行中かどうか調べる方法はありませんか。 標準出力に値を吐き出し続けるコンソールアプリケーションから、値を取得して処理をしたいのですが、CreateProcessでつくってパイプで処理しようとしています。ぐぐったところWaitForSingleObjectで待つようなサンプルは見つかったのですが、呼び出したプロセスが終了しないのでこれは使えないので 実行中はずっとループし続けるような感じにしたいのですが。 よろしくお願いします

  • VB.NETでCreateProcess

    VB.NET(2003)で、別exeを起動し、終了まで待機するということをするために、 system.Diagnostics.Processクラスを使用していました。 しかし、実際に動かす環境がMetaFrameなのですが、 その環境では、このクラスは使用できないようで画面の起動すらできなくなります。 ですので、別の方法ということで、APIのCreateProcess、WaitForSingleObjectを使用するように変更したいのですが、 VB.NETでのサンプルが余り無いため、パラメータにどのように設定するかなどがよくわかりません。 API自体使ったことが無いので、根本的にわから無すぎるのです・・・ VB.NETでAPI利用サンプルが多く掲載されているサイト、 できれば、CreateProcess、WaitForSingleObjectを使用しているサンプルなどありましたら、ご教授願います。 よろしくお願いいたします。

  • CreateProcess関数について

    ■CreateProcess関数で実行フアイル(.exe)を呼ぶプログラムを作成しています。 ■CreateProcess関数はプロセスを作成すると直に呼出側に戻って来るが、起動したプログラムの実行結果ではない。 ■その様な事を踏まえてプログラム下記にコーテイングしました(概要) ■「呼び出し側」も「呼び出される」もCD-ROM内に有ります。 ■問題はCreateProcess関数で呼んでから、実際に画像が表示されるまでに、時間が掛かる事です。、 ■「質 問」「やりたい事」 CreateProcess関数で呼んでから、実行画面が表示される時間の間に 「その旨のなんだかのメッセージを表示したい」 例えば、Webでのダウンロードやインストールの時の様な... この様な事を、実現するのはどの様にしますか、宜しくお願いします。 STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si,sizeof(si)); si.cb=sizeof(si); ZeroMemory(&pi,sizeof(pi)); if(CreateProcess(NULL,(LPTSTR)cmdline,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)){ CloseHandle(pi.hThread); //CD-ROMから直ぐ表示出来ない場合に備えて //この間で表示に時間を要している事をメッセージ出来ないか? ShowWindow(hWnd,SW_MINIMIZE);//タスクトレイに入れる。 WaitForSingleObject(pi.hProcess,INFINITE); CloseHandle(pi.hProcess); ShowWindow(hWnd,SW_RESTORE););//タスクトレイから出す。 }

  • ワードで複数ファイルのインクルードを行いたい

    ワードで複数ファイルのインクルードを行いたいのですが、ご教授下さい。 以下の4ファイルがあったとします。 main.doc 1.doc 2.doc 3.doc main.docには1,2,3.doc を読み込むだけの処理を行います。 1.docを編集すると、main.doc は随時更新された情報を表示します。 #挿入>ファイルで同様のことは可能ですが、これだとインクルードというより、コピーして貼り付けた状態になり、1.docを編集しても反映されません。 私は、あくまで表示させるのはmain.doc で、文を書くのは1.docとさせたいのですが、可能でしょうか? #Texのインクルードをイメージしています。 Office2003を使用しています。

  • ファイルオープンの際のウィンドウハンドルの取得方法

    VC++2008にてプログラムを作成しています。 自作プログラム(疑似エクスプローラ)にて、 ShellExecute関数でファイルをオープンさせた際に、 開かれたファイルウィンドウのHWNDまたはCWndを 取得したいのですが、実現方法が分かりません。 ・やりたい事  複数ファイルをオープンさせて、各ファイルが閉じられた時に、  ファイル毎に任意の処理を行いたい。 マルチスレッドにて、CreateProcess→ファイルオープンを行い、 WaitForSingleObjectで、ファイルが閉じられるまで待機し、 コントロールが戻ってきたら、任意処理をするようにしていたのですが、 PowerPointファイルは複数ファイルを立ち上げても、 1プロセスにしかならないため、実装の変更を余儀なくされました。 CWnd->m_hWndで、各ファイルの区別が付けられるのではないかと 考え、現在、テスト用処理を組んでいるところです。 ファイルが閉じられたかどうかは、APIフックを用い、 DestroyWindowが呼ばれた際のHWNDを、自作プログラム側に送り、 ShellExecute時に取得しておいたHWND(またはCWnd)であれば、 任意処理へ移行。といった流れを考えています。 ShellExecute時に立ち上がったファイルのハンドルの 取得方法、または、全く別に、上記の目的を満たす 処理方法がありましたら、アドバイスお願いします。

  • プロセスについて

    アプリを起動するとプロセスが発生すると思うのですが、そのプロセスはまず仮想メモリアドレス空間に待機しその後物理メモリにて処理され、いっぱいだった場合はページングファイルが使われると思います。 その場合、1つのアプリでのプロセスが物理メモリとページングファイルに分かれることはあるのでしょうか?

  • WORDで複数のファイルを印刷するときの設定

    複数のWORDのファイル(docファイル)を印刷するとき、どのファイルから印刷するかを指定することは可能なのでしょうか?

  • CreateProcessについて

    VC++6.0を使用し、NT上で以下のようなプログラムを作成していました。 Prcess_sts = ::CreateProcess(***_FULLPATH, NULL, NULL, NULL, FALSE, 0, NULL, ***_DIR, &pscinfo, &lpProcessInfo ); ***は起動する実行形名称です。作成したプログラムをNT上で動作させるには全く問題なかったのですが、OSがXPに変わった途端、この命令でアプリケーションの起動ができなくなりました。具体的な症状は、 ・カーソルは砂時計を表示し、フリーズしている ・タスクマネージャの『プロセス』を確認すると、99%がアイドル状態で、起動したアプリ及びCallしたアプリがリソースを食い潰している状態ではない。 という変な現象が発生しています。ちなみに、このような状態になるのは、コールしたプログラムの先でシリアル通信を行うものに頻発しているように感じます(気のせいかも?)また、全く問題なく起動することもあります。これはOSのせいなのでしょうか?もちろん、NT上で動作させていたときは全くなかった現象です。VC++がXPに対応していないからなのでしょうか?全く分からずに困っています。その道に明るい方がいましたら、ご教示ください。 PS マイクロソフトが発表している『32ビットプロセスでCreateProcess関数を呼び出しても正しく起動されない』というものとは違うようです。 よろしくお願いします。

  • 子プロセスのデバッグ方法について

    VisualStudio2008のVCでデバッグをしています。 Win32のCreateProcess関数で"自分自身"のEXEファイルを実行すると、新プロセスが起動するのですがデバッグができません。 CreateProcessの呼び出し側プロセスと、同じプログラムである新プロセスを同時にデバッグすることはできないものでしょうか。

専門家に質問してみよう