web-dev-qa-db-ja.com

C#で別のアプリケーションを起動するにはどうすればよいですか?

2つのデスクトップアプリケーションがあります。最初のアプリケーションを閉じた後、最初のアプリケーションは2番目のアプリケーションを起動します。

最初のアプリケーションを終了した後、2番目のアプリケーションを開始するにはどうすればよいですか?

私の最初のアプリケーションは別のデスクトップを作成します。

21
Suriyan Suresh

他の人が説明したように、.NETのプロセスクラスを使用してプロセスを開始できます。次に問題はいつ電話するかです。

ほとんどの場合、_Form.Closing_または_Form.Closed_イベントを使用するのが簡単な選択のようです。

ただし、他の誰かがイベントを処理でき、_CancelEventArgs.Cancel_をtrueに設定できる場合、これはこれを行うには適切な場所ではない可能性があります。また、Application.Exit()が呼び出されても、_Form.Closing_および_Form.Closed_イベントは発生しません。未処理の例外が発生した場合に、どちらのイベントが発生するかわかりません。 (また、Application.Exit()または未処理の例外が発生した場合に2番目のアプリケーションを起動するかどうかを決定する必要があります)。

最初のアプリケーション(App1)が終了した後で、2番目のアプリケーション(App2)が確実に起動するようにしたい場合は、次のトリックを実行できます。

  1. 別のアプリケーション(App0)を作成する
  2. App0がApp1を起動
  3. App0はApp.1がProcess.WaitExit()で終了するのを待ちます
  4. App0はApp2を起動して終了します

以下に添付されているサンプルコンソールアプリは非常に単純なケースを示しています。私のサンプルアプリは最初にメモ帳を起動します。次に、メモ帳が終了すると、mspaintが起動し、それ自体が終了します。

コンソールを非表示にする場合は、プロジェクトプロパティの[アプリケーション]タブで、[出力タイプ]プロパティを[コンソールアプリケーション]から[Windowsアプリケーション]に設定するだけです。

サンプルコード:

_using System;
using System.Diagnostics;

namespace ProcessExitSample
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {

                Process firstProc = new Process();
                firstProc.StartInfo.FileName = "notepad.exe";
                firstProc.EnableRaisingEvents = true;

                firstProc.Start();

                firstProc.WaitForExit();

                //You may want to perform different actions depending on the exit code.
                Console.WriteLine("First process exited: " + firstProc.ExitCode);

                Process secondProc = new Process();
                secondProc.StartInfo.FileName = "mspaint.exe";
                secondProc.Start();                

            }
            catch (Exception ex)
            {
                Console.WriteLine("An error occurred!!!: " + ex.Message);
                return;
            }
        }
    }
}
_
17
Chansik Im

最初のアプリケーションを終了するときに Process class を使用します。

var p = new Process();
p.StartInfo.FileName   = "notepad.exe";  // just for example, you can use yours.
p.Start();
18
JP Alioto

あなたはそれをシェルオフすることができるので、最初のアプリを終了しようとしているときに、次のようにして2番目のアプリを開始するだけです:

System.Diagnostics.Process.Start(@"PATH\NAME.EXE");
3

.NETの Process クラスを使用します。

1
Mitch Wheat

いくつかのサンプルコード:

try
{
  stateMainLayout b = new stateMainLayout();
 b.Location = Screen.AllScreens[1].WorkingArea.Location;
 b.ShowDialog();
 }
catch
{
 stateMainLayout b = new stateMainLayout();
b.ShowDialog();
}
0
Hassan Abbas

ここでProcNameは、起動するアプリケーションの名前を意味しますが、システムアプリケーションと他の一部のアプリケーションしか起動できません

        public void Startapp(String ProcName)
        {
            try
            {
                Process firstProc = new Process();
                firstProc.StartInfo.FileName = ProcName;
                firstProc.EnableRaisingEvents = true;
                firstProc.Start();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
0
Abdul Moiz

CSharp/PowerShellによる別のプログラムの呼び出しとデータの送受信: https://huseyincakir.wordpress.com/2014/12/23/sending-input-from-csharppowershell-to-another-program/

0
huse.ckr

アプリを完全に機能させるために、コードにWorking directoryを追加する必要がある場合があります。特に、アプリがDLLおよびその他のリソースに依存している場合。

 TestProcess.StartInfo.FileName = "notepad.exe"; 
 TestProcess.StartInfo.WorkingDirectory = @"C:\\blah\blah\Directory of notepad.exe\";
 TestProcess.Start();
0
Mamo Ghandi