Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何管理多个项目_C# - Fatal编程技术网

C# 如何管理多个项目

C# 如何管理多个项目,c#,C#,我在一个解决方案中有两个项目:MainApp和Updater。我想从MainApp打开Updater,因此我在MainApp中添加了Updater作为参考。一切正常,但我无法关闭MainApp进行更新。当我关闭MainApp时,Updater也会关闭 以下是调用更新程序的方法: Updater.frmUpdater f = new Updater.frmUpdater(); f.serverPath = "http://127.0.0.1/qlhd/"; f.Show(); 你需要一个单独的过

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

以下是调用更新程序的方法:

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

你需要一个单独的过程来做你想做的事情。不要直接引用更新程序,而是需要使用
StartProcess


正如詹姆斯所说,您需要在一个单独的过程中启动它

Process p = new Process();
p.StartInfo.FileName = "updater.exe";
p.Start();
或者干脆

Process.Start("updater.exe");
请注意,要使“updater.exe”正常工作,exe需要与主应用程序位于同一文件夹中。 还请注意 如果使用第一个示例,则可以使用p.WaitForExit();在执行任何其他操作之前等待流程完成

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

p.StartInfo.Arguments=@“-phttp://127.0.0.1/qlhd/";


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

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

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#中,您可以通过更改Program.cs中的
Main()
方法来实现相同的结果,方法是不将
MainApp
表单作为上下文传递

而不是:

Application.Run(frmMainApp);
你会写:

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

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

(假设问题中的含义是正确的,并且OP正在尝试运行自动更新机制。)您必须使用
进程。启动
此机制才能工作,否则
mainapp.exe
仍在运行。您的建议将允许您关闭主窗体,但这对更新过程没有帮助,因为原始的
.exe
仍在承载新窗体。确实如此。如果你这样看,我的解决方案几乎毫无价值。