我在一个解决方案中有2个项目:MainApp
和Updater
。我想从Updater
打开MainApp
,因此我在Updater
中添加了MainApp
作为参考。一切都很好,但我无法关闭MainApp
进行更新。当我关闭MainApp
时,Updater
也会关闭。
这是如何致电Updater
:
Updater.frmUpdater f = new Updater.frmUpdater();
f.serverPath = "http://127.0.0.1/qlhd/";
f.Show();
答案 0 :(得分:1)
您需要一个单独的流程来执行您想要执行的操作。不要直接引用更新程序,而是需要使用StartProcess
答案 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安装程序)。但这会使你的更新程序项目几乎完全冗余。