如何管理多个项目

时间:2014-04-29 06:51:15

标签: c#

我在一个解决方案中有2个项目:MainAppUpdater。我想从Updater打开MainApp,因此我在Updater中添加了MainApp作为参考。一切都很好,但我无法关闭MainApp进行更新。当我关闭MainApp时,Updater也会关闭。

这是如何致电Updater

Updater.frmUpdater f = new Updater.frmUpdater();
f.serverPath = "http://127.0.0.1/qlhd/";
f.Show();

3 个答案:

答案 0 :(得分:1)

您需要一个单独的流程来执行您想要执行的操作。不要直接引用更新程序,而是需要使用StartProcess

See here for more information and a similar question

答案 1 :(得分:0)

詹姆斯说,你需要在一个单独的过程中启动它

Process p = new Process();
p.StartInfo.FileName = "updater.exe";
p.Start();

或只是

Process.Start("updater.exe");

注意,对于" updater.exe"要使用,exe需要与主应用程序位于同一文件夹中。 还要注意 如果您使用第一个示例,则可以使用p.WaitForExit();在做其他任何事情之前等待这个过程完成。

您可以使用参数(如serverpath)启动进程

p.StartInfo.Arguments = @"-P http://127.0.0.1/qlhd/";

如果您需要有关为更新程序创建参数的帮助,请阅读this

答案 2 :(得分:0)

我认为可以在运行时更改主窗体。

Updater.frmUpdater f = new Updater.frmUpdater();
ApplicationContext.MainForm = f
f.serverPath = "http://127.0.0.1/qlhd/";
f.Show();

未经测试,但这样您就可以在不退出MainApp的情况下关闭frmUpdater

修改

我不确定如何在应用程序ApplicationContext启动后访问它,但我知道这可以通过某种方式完成。

我还记得一个设置,允许您选择“主窗体关闭时退出”或“关闭所有窗体时退出”。但它似乎只在VB.NET中实现。

在C#中,通过不将Main()表单作为上下文传递来更改Program.cs中的MainApp方法,可以获得相同的结果。

而不是:

Application.Run(frmMainApp);

你写道:

Application.Run();
frmMainApp.Show();

无论如何,正如@Dan指出的那样,你不能在与需要更新的程序相同的进程中运行更新程序。除非更新程序本身启动另一个进程(例如ClickOnce安装程序)。但这会使你的更新程序项目几乎完全冗余。