2つのデスクトップアプリケーションがあります。最初のアプリケーションを閉じた後、最初のアプリケーションは2番目のアプリケーションを起動します。
最初のアプリケーションを終了した後、2番目のアプリケーションを開始するにはどうすればよいですか?
私の最初のアプリケーションは別のデスクトップを作成します。
他の人が説明したように、.NETのプロセスクラスを使用してプロセスを開始できます。次に問題はいつ電話するかです。
ほとんどの場合、_Form.Closing
_または_Form.Closed
_イベントを使用するのが簡単な選択のようです。
ただし、他の誰かがイベントを処理でき、_CancelEventArgs.Cancel
_をtrueに設定できる場合、これはこれを行うには適切な場所ではない可能性があります。また、Application.Exit()
が呼び出されても、_Form.Closing
_および_Form.Closed
_イベントは発生しません。未処理の例外が発生した場合に、どちらのイベントが発生するかわかりません。 (また、Application.Exit()
または未処理の例外が発生した場合に2番目のアプリケーションを起動するかどうかを決定する必要があります)。
最初のアプリケーション(App1)が終了した後で、2番目のアプリケーション(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;
}
}
}
}
_
最初のアプリケーションを終了するときに Process class を使用します。
var p = new Process();
p.StartInfo.FileName = "notepad.exe"; // just for example, you can use yours.
p.Start();
あなたはそれをシェルオフすることができるので、最初のアプリを終了しようとしているときに、次のようにして2番目のアプリを開始するだけです:
System.Diagnostics.Process.Start(@"PATH\NAME.EXE");
.NETの Process
クラスを使用します。
いくつかのサンプルコード:
try
{
stateMainLayout b = new stateMainLayout();
b.Location = Screen.AllScreens[1].WorkingArea.Location;
b.ShowDialog();
}
catch
{
stateMainLayout b = new stateMainLayout();
b.ShowDialog();
}
ここで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);
}
}
CSharp/PowerShellによる別のプログラムの呼び出しとデータの送受信: https://huseyincakir.wordpress.com/2014/12/23/sending-input-from-csharppowershell-to-another-program/
アプリを完全に機能させるために、コードにWorking directoryを追加する必要がある場合があります。特に、アプリがDLLおよびその他のリソースに依存している場合。
TestProcess.StartInfo.FileName = "notepad.exe";
TestProcess.StartInfo.WorkingDirectory = @"C:\\blah\blah\Directory of notepad.exe\";
TestProcess.Start();