通过执行的app关闭执行程序应用程序

时间:2013-12-11 11:31:18

标签: c#

我的C#项目出了问题。我有两个申请:

  • 我将称之为Mini Launcher的执行程序应用程序
  • 执行的应用程序,我将称之为Launcher

我的问题是:我想通过Mini启动器运行我的Launcher,然后在Launcher app的Show事件中关闭Mini Launcher。 My Mini Launcher类似于启动画面,但具有升级启动器等其他功能。它是我的执行代码:

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.WorkingDirectory = "My Directory"
startInfo.FileName = "My App";
try
{
    using (Process exeProcess = Process.Start(startInfo))
    {
        exeProcess.();
    }
}
catch
{
    ...
}

3 个答案:

答案 0 :(得分:2)

首先,我建议你考虑一下:

1)他们真的需要单独申请吗?

2)如果是这样,为什么MiniLauncher在Launcher加载后不能自行关闭?

但如果你必须这样做,那么你正在寻找的代码是这样的:

private void OnShow()
{
    var target = Process.GetProcessesByName("MiniLauncher.exe").FirstOrDefault();

    if (target != null)
    {
        // any other checks that this is indeed the process you're looking for
        target.Close();
    }

}

答案 1 :(得分:2)

查看Mutex课程。命名的mutices为应用程序提供了一种相互发送信号的方法。
以下示例显示了两个Console应用程序。 TestMutexLauncher应用程序启动TestMutex应用程序:

using System;
using System.Diagnostics;
using System.Threading;

namespace TestMutexLauncher
{
    class Program
    {
        static void Main(string[] args)
        {
            var p = Process.Start("TestMutex");
            Console.WriteLine("Waiting for other process to release the mutex.");
            Thread.Sleep(1000); // maybe p.WaitForInputIdle is an alternative for WinForms/WPF
            Mutex mutex = null;
            for (int i = 0; i < 100; i++)
            {
                if (Mutex.TryOpenExisting("MyUniqueMutexName", out mutex))
                    break;
                Thread.Sleep(100);
            }
            if (mutex != null)
            {
                try
                {
                    mutex.WaitOne();
                    mutex.ReleaseMutex();
                }
                finally
                {
                    mutex.Dispose();
                }
            }
        }
    }
}

启动器应用程序启动该进程并等待在另一个进程中创建互斥锁。如果它可以在指定的时间范围内获得互斥锁的所有权,它将等待获得互斥锁的所有权。之后,它会重新发布并处置Mutex 启动的应用程序的第一项任务是创建互斥锁,执行初始化操作,然后释放互斥锁。

using System;
using System.Threading;

namespace TestMutex
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var mutex = new Mutex(true, "MyUniqueMutexName"))
            {
                // Do something
                for (int i = 0; i < 10000; i++)
                    Console.Write(".");
                Console.WriteLine();
                Console.WriteLine("Press enter...");
                Console.ReadLine();
                mutex.ReleaseMutex();
            }
            for (int i = 0; i < 10000; i++)
                Console.Write(".");
            Console.WriteLine();
            Console.WriteLine("Press enter...");
            Console.ReadLine();

        }
    }
}

答案 2 :(得分:1)

您可以从当前正在运行的项目调用另一个项目可执行文件,然后您可以关闭您的应用程序。

    class Program
    {
        static void Main()
        {
        //
        // Open the application "application" that is in the same directory as
        // your .exe file you are running.
        //
        Process.Start("example.txt");
// or for another directory you need to specify full path 
Process.Start("C:\\");
        }
    }