.Net/C#实现程序的唤起操作

前言

不知道是不是一个假的需求,反正就是要实现这么一种操作,就是我要在当前程序唤起另一个程序,并且需要传入特定的数据信息。以下我以个人能力范围想到了三种实现方式。

方式一

这个最简单了,直接在进程中启动一个已知的程序,缺点是只能启动,并不能传递参数。可以唤起任何程序。

1
2
3
4
5
static void Main(string[] args)
{
Process.Start(@"F:\FlashFXP\flashfxp.exe");
Console.ReadKey();
}

方式二

通过引用的方式将要启动的文件添加到已有的项目中
前置条件:
1、要引用的项目文件没有进行加密/加壳
2、提供了对应的入口(因为我们需要传递参数)
这种方式一般适用于自己项目之间的通信/唤起。

步骤一:

建立了一个项目LoginDemo,并在其中提供了相应的入口点,用于被其他程序来进行唤起。

程序唤起的入口点:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/// <summary>
/// 程序登录入口点
/// </summary>
public class LoginEntryPoint
{
/// <summary>
/// 系统登陆入口点
/// </summary>
/// <param name="loginId"></param>
/// <param name="loginPwd"></param>
/// <returns></returns>
public bool LoginSystem(string loginId, string loginPwd)
{
if (loginId == "123" && loginPwd == "123")
{
new FrmMain().Show();//登陆成功后进入一个新的窗体界面。
}
else
{
return false;
}
return true;
}

}

步骤二

建立另一个项目ClientDemo用于唤起LoginDemo项目,界面上只有一个唤起的按钮用于唤起LoginDemo项目。

步骤三:

ClientDemo项目中添加对LoginDemo项目生成的exe文件的引用。

点击浏览按钮找到LoginDemo项目生成的exe文件然后确定,最后OK即可。

这时项目已经被引入了进来。

最后在ClientDemo项目中通过按钮的点击事件来唤起我们的LoginDemo程序。通过传递参数的方式直接进入了LoginDemo的主界面,直接跳过了登陆窗体。

1
2
3
4
5
6
7
8
9
private void BtnOpen_Click(object sender, EventArgs e)
{
LoginDemo.LoginEntryPoint loginEntryPoint = new LoginDemo.LoginEntryPoint();
bool result= loginEntryPoint.LoginSystem("123", "123");
if (result==false)
{
MessageBox.Show("The LoginId or Password is incorrect!");
}
}

以上就是第二种实现方式了,虽然实现了我们想要的,但是这样做和LoginDemo这个程序产生了极大的耦合,在我们Debug目录下会生成一个同样的exe文件,避免这种耦合我们还可以采用第三种措施,也就是使用反射。

方式三

这个和第二思路是一样的,只不过实现方式不同罢了,以下使用反射,无需对LoginDemo项目进行引用添加,避免产生了耦合。

1
2
3
4
5
6
7
8
9
10
11
12
private void BtnOpen_Click(object sender, EventArgs e)
{
string proFilePath = @"E:\LoginDemo\LoginDemo.exe";//项目地址
Assembly assembly = Assembly.LoadFile(proFilePath);
var loginEntryPoint = assembly.CreateInstance("LoginDemo.LoginEntryPoint");
Type type = loginEntryPoint.GetType();
var result = (bool)type.GetMethod("LoginSystem").Invoke(loginEntryPoint, new object[] { "123", "123" });
if (result==false)
{
MessageBox.Show("The LoginId or Password is incorrect.");
}
}

Demo下载

Demo:点击下载