none
Process->startメソッドについて RRS feed

  • 質問

  • 毎度お世話になっています。

    Process->Startメソッドについて質問があります。

    通常ボタンを押すことで他のアプリケーションを起動させるには
    例えばメモ帳なら


    private: System::Void toolStripButton1_Click(System::Object^  sender, System::EventArgs^  e) {
        Process^ myprocess = gcnew Process();
        myprocess->Start("notepad.exe");
    }

    このように記述しますが…
    独自の実行ファイル例えばa.exeとすると

    もし,このa.exeがDドライブ以下にあった場合

    private: System::Void toolStripButton1_Click(System::Object^  sender, System::EventArgs^  e) {
        Process^ myprocess = gcnew Process();
        myprocess->Start("D:\a.exe");
    }


    と絶対パスを記述しないと起動しません。
    しかしa.exeをDドライブ以外に移動させると当然起動しなくなるのですが

    このa.exeがどこのドライブやフォルダにあっても
    起動することができるような方法はないでしょうか…

    ファイルを検索し、パスを取得した後、変数に入れて起動させることを
    考えましたが…ファイル検索のメソッドなどが見つからなかった為
    質問しました。よろしくお願いします。

    2007年2月6日 8:05

回答

  • yuuzou さん、こんにちは。

     yuuzou さんからの引用
    Process->Startメソッドについて質問があります。

    通常ボタンを押すことで他のアプリケーションを起動させるには
    例えばメモ帳なら

    private: System::Void toolStripButton1_Click(System::Object^  sender, System::EventArgs^  e) {
        Process^ myprocess = gcnew Process();
        myprocess->Start("notepad.exe");
    }

    このように記述しますが…

    いいえ、

    Process::Start("notepad.exe");

    と書きます。(私は)

    独自の実行ファイル例えばa.exeとすると

    もし,このa.exeがDドライブ以下にあった場合

    private: System::Void toolStripButton1_Click(System::Object^  sender, System::EventArgs^  e) {
        Process^ myprocess = gcnew Process();
        myprocess->Start("D:\a.exe");
    }


    と絶対パスを記述しないと起動しません。
    しかしa.exeをDドライブ以外に移動させると当然起動しなくなるのですが

    このa.exeがどこのドライブやフォルダにあっても
    起動することができるような方法はないでしょうか…

    これは、独自の実行ファイルだから実行されないわけではありません。
    システム パスが通っているディレクトリにいないから実行されないだけです。

    WINDOWS ディレクトリに入れれば、notepad 同様に実行はされるでしょう。
    ただし、普通は絶対パスで起動させるべきです。

    2007年2月6日 8:13
  • このa.exeがどこのドライブやフォルダにあっても
    起動することができるような方法はないでしょうか…

    パスが通っているところでなければ起動できないのが普通です。
    (Windowsがそういう仕組みだからしょうがない)

    ファイルを検索し、パスを取得した後、変数に入れて起動させることを

    別のディレクトリに同名の実行ファイルが有ったらどうなるんでしょうか?
    もし検索するとなると、ファイルが見つからないという状態のときどうしますか?
    (ファイルが多ければ多いほど遅くなりそうだが)
    2007年2月6日 8:18
  • 蒼の洞窟さん,中博俊さんアドバイスありがとうございます.


    どうやら, Start("絶対パス")でやった方がいいみたいですね;
    確かに同じ名前の実行ファイルがあった場合など考えてませんでした.

    実行ファイルが見つからなかった場合は
    try-catchでメッセージか何かを出そうと思ったのですが,
    検索という手段を使う時点で膨大なファイルを検索する羽目
    になるのですから実用的とは言えませんね.

    参考になりました.

    2007年2月7日 14:43

すべての返信

  • yuuzou さん、こんにちは。

     yuuzou さんからの引用
    Process->Startメソッドについて質問があります。

    通常ボタンを押すことで他のアプリケーションを起動させるには
    例えばメモ帳なら

    private: System::Void toolStripButton1_Click(System::Object^  sender, System::EventArgs^  e) {
        Process^ myprocess = gcnew Process();
        myprocess->Start("notepad.exe");
    }

    このように記述しますが…

    いいえ、

    Process::Start("notepad.exe");

    と書きます。(私は)

    独自の実行ファイル例えばa.exeとすると

    もし,このa.exeがDドライブ以下にあった場合

    private: System::Void toolStripButton1_Click(System::Object^  sender, System::EventArgs^  e) {
        Process^ myprocess = gcnew Process();
        myprocess->Start("D:\a.exe");
    }


    と絶対パスを記述しないと起動しません。
    しかしa.exeをDドライブ以外に移動させると当然起動しなくなるのですが

    このa.exeがどこのドライブやフォルダにあっても
    起動することができるような方法はないでしょうか…

    これは、独自の実行ファイルだから実行されないわけではありません。
    システム パスが通っているディレクトリにいないから実行されないだけです。

    WINDOWS ディレクトリに入れれば、notepad 同様に実行はされるでしょう。
    ただし、普通は絶対パスで起動させるべきです。

    2007年2月6日 8:13
  • このa.exeがどこのドライブやフォルダにあっても
    起動することができるような方法はないでしょうか…

    パスが通っているところでなければ起動できないのが普通です。
    (Windowsがそういう仕組みだからしょうがない)

    ファイルを検索し、パスを取得した後、変数に入れて起動させることを

    別のディレクトリに同名の実行ファイルが有ったらどうなるんでしょうか?
    もし検索するとなると、ファイルが見つからないという状態のときどうしますか?
    (ファイルが多ければ多いほど遅くなりそうだが)
    2007年2月6日 8:18
  • 環境変数PATHを知らないんじゃない?

    調べてみてください。

    2007年2月6日 11:44
  • 蒼の洞窟さん,中博俊さんアドバイスありがとうございます.


    どうやら, Start("絶対パス")でやった方がいいみたいですね;
    確かに同じ名前の実行ファイルがあった場合など考えてませんでした.

    実行ファイルが見つからなかった場合は
    try-catchでメッセージか何かを出そうと思ったのですが,
    検索という手段を使う時点で膨大なファイルを検索する羽目
    になるのですから実用的とは言えませんね.

    参考になりました.

    2007年2月7日 14:43